Android 在某些后台应用程序中发生崩溃

Raf*_*ima 10 android

我面临着一个非常烦人的 Android 崩溃,该崩溃发生在大约 1% 的生产会话中,并且应用程序始终在后台运行。

Fatal Exception: android.app.RemoteServiceException: Attempt to invoke virtual method 'int com.android.server.wm.TaskDisplayArea.getDisplayId()' on a null object reference
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2054)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:250)
       at android.app.ActivityThread.main(ActivityThread.java:7755)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
Run Code Online (Sandbox Code Playgroud)

从这个堆栈可以清楚地看出,它来自内部 android MainLooper 操作...但是缺乏额外的信息,我很难发现到底是什么

有谁知道这是什么问题以及如何解决它?

小智 0

对于这一级别的信息,我们无能为力。我唯一能看到的是:

android.app.RemoteServiceException: Attempt to invoke virtual method 'int com.android.server.wm.TaskDisplayArea.getDisplayId()' on a null object reference
Run Code Online (Sandbox Code Playgroud)

getTaskDisplayArea()在某个阶段,您的代码正在调用(或使用调用的库)com.android.server.wm。这将返回空值。然后它尝试使用它来getDisplayId().

(其余的错误行仅表明它不在主线程中)

TaskDisplayArea当 UI 已被销毁或尚未创建时,无论您在何处使用(或调用它的库),都可能会被调用。

这种罕见情况表明它可能是您的 UI/显示元素的完全后台重新启动...如果我不得不猜测可能是由于多任务处理时 Android 操作系统内存清理触发器或用户反复更改方向等引起的。

如果您提供有关使用代码com.android.server.wm或布局的位置的更多详细信息,您可能会获得有关如何使后台线程安全的更多帮助。根据您实际执行的操作,您可能最终会捕获异常并稍后重试,但某些视图将允许您将信息发布到主线程,我不知道是否可以TaskDisplayArea