关闭使用其他应用程序的服务的 IllegalArgumentException

IllegalArgumentException from closing service that draws on other apps

我正在编写一个 android 应用程序,该应用程序在后台运行一项服务,该服务利用 OVERLAY_PERMISSION 来利用其他应用程序。它以我主 activity 上的一个按钮的意图开始。到目前为止,还不错。

在我的服务中,在我的 onDestroy() 中,我有一个 if (myView != null) windowManager.removeView(myView);。当我从 activity 调用 stopService 时,我收到一条错误消息:

java.lang.RuntimeException: Unable to stop service com.supernovaapps.cameralevel.LevelService@ed1633f: java.lang.IllegalArgumentException: View=android.widget.AbsoluteLayout{94fb155 V.E...... ......I. 0,0-0,0} not attached to window manager

如果我注释掉该行,我只能关闭该服务。但是,如果我这样做,即使在服务关闭后视图仍保留在屏幕上,这不是我想要的。

关闭服务和分离视图的正确方法是什么?

完整跟踪:

12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime: FATAL EXCEPTION: main
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime: Process: com.supernovaapps.cameralevel, PID: 21233
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime: java.lang.RuntimeException: Unable to stop service com.supernovaapps.cameralevel.LevelService@ed1633f: java.lang.IllegalArgumentException: View=android.widget.AbsoluteLayout{94fb155 V.E...... ......I. 0,0-0,0} not attached to window manager
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.app.ActivityThread.handleStopService(ActivityThread.java:3059)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.app.ActivityThread.-wrap21(ActivityThread.java)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1447)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:  Caused by: java.lang.IllegalArgumentException: View=android.widget.AbsoluteLayout{94fb155 V.E...... ......I. 0,0-0,0} not attached to window manager
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:424)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:350)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:111)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at com.supernovaapps.cameralevel.LevelService.onDestroy(LevelService.java:164)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.app.ActivityThread.handleStopService(ActivityThread.java:3040)
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.app.ActivityThread.-wrap21(ActivityThread.java) 
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1447) 
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102) 
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148) 
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417) 
12-20 20:16:10.042 21233-21233/com.supernovaapps.cameralevel E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)

您向 windowManager 传递的视图似乎与之前添加的视图不同。 只需将其传递给正确的视图即可。