Вид не привязан к диспетчеру окон Служба остановлена?

Мое приложение использует службу для добавления постоянного наложения на экран через WindowManager:

   @Override
   public int onStartCommand(Intent intent, int flags, int startId) {
      super.onStartCommand(intent, flags, startId); 

         wm.addView(ll, ll_lp);
         addNotification();

    }

Пользователи получают сообщение об ошибке примерно через 10-15 минут работы службы, которая принудительно закрывает приложение со следующим исключением:

 java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:383)
at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:285)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:79)
at com.MyApp.MyService.onDestroy(MyService.java:210)

Вот строка в MyService:

@Override
    public void onDestroy() {
        super.onDestroy();
        wm.removeView(ll);
        removeNotification();
    }

Я предполагаю, что происходит то, что ОС Android убивает мое приложение, и WM больше не может получить доступ к представлению ll? Как я могу убедиться, что

  1. Оверлей сохраняется дольше 10-15 минут и не удаляется операционной системой Android.
  2. Я не получаю эту ошибку, если ее убивают

comment
Чёрт, вообще никаких ответов...   -  person Denny    schedule 28.02.2017
comment
До сих пор нет ответовXD   -  person Denny    schedule 28.01.2018


Ответы (1)


Сначала я удалил уведомление, а затем попытался удалить представление / поймал возможное исключение:

try
{
    if(ll != null) wm.removeView(ll);
}
catch(IllegalArgumentException e)
{
    Log.e("myapp", "removed view that is not there");
}

Надеюсь, это как-то поможет!

person Colibri    schedule 09.01.2019