1

我的应用程序使用服务通过 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. 如果它确实被杀死,我不会收到此错误
4

1 回答 1

0

我先删除了通知,然后尝试删除视图/捕获了可能的异常:

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

希望这会有所帮助!

于 2019-01-09T13:09:51.153 回答