我正在使用 Android 服务来更新 appwidget。我使用 startForegroundService 为 android O 及更高版本启动服务,并使用 startForeground 为 21-26(我的项目的较低 api 范围)启动服务。当我通过选择“调试应用程序”或“运行应用程序”使用 Android Studio 调试器运行应用程序时,应用程序和服务将正常工作。一旦我通过点击 Studio 中的“停止应用程序”按钮关闭应用程序,应用程序就会崩溃。我在 logcat 中收到以下错误:
2020-12-28 18:05:08.934 1737-1919/? W/SurfaceFlinger: Attempting to destroy on removed layer: AppWindowToken{a11cf63 token=Token{7695992 ActivityRecord{4c3031d u0 dev.rand.zulutime/.ZuluTime3 t47}}}#0 <---
2020-12-28 18:05:26.453 1879-1889/? I/ActivityManager: Force stopping dev.rand.zulutime appid=10086 user=0: from pid 7754
2020-12-28 18:05:26.453 1879-1889/? I/ActivityManager: Killing 7666:dev.rand.zulutime/u0a86 (adj 200): stop dev.rand.zulutime
2020-12-28 18:05:26.453 1879-1889/? W/ActivityManager: Scheduling restart of crashed service dev.rand.zulutime/.TimerTick in 1000ms
2020-12-28 18:05:26.456 1879-1889/? I/ActivityManager: Force stopping service ServiceRecord{f0d3b05 u0 dev.rand.zulutime/.TimerTick}
标有 <--- 的第一行是我单击停止按钮之前出现的最后一行。然后该服务被强制停止并拒绝重新启动。
我通过 Google Play 收到错误消息,表明发生 NullPointerException,但 logcat 中唯一的异常是
Didn't find class "androidx.core.app.CoreComponentFactory
我在 StackOverflow 上到处搜索,但没有帮助我为什么会得到这个,但这似乎不是导致服务崩溃的问题,因为该服务不使用 androidx 的布局资源。调试应用程序时出现 NullPointerException,这是由 getResourceIdentifier() 引起的 NumberFormatException ,但这似乎是设计使然,在我的崩溃报告中没有引用,如下所示:
java.lang.RuntimeException:
at android.app.ActivityThread.handleServiceArgs (ActivityThread.java:4733)
at android.app.ActivityThread.access$2000 (ActivityThread.java:302)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2155)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:246)
at android.app.ActivityThread.main (ActivityThread.java:8414)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:596)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130)
Caused by: java.lang.NullPointerException:
at dev.rand.zulutime.TimerTick.onStartCommand (TimerTick.java:98)
at android.app.ActivityThread.handleServiceArgs (ActivityThread.java:4715)
发生的另一件有趣的事情是,当应用程序在调试会话后立即崩溃时,我仍然可以在虚拟设备中正常运行该应用程序,一旦我启动该应用程序,该服务就会正常运行并且不会崩溃。
我只是不明白为什么 ActivityManager 在我退出调试器后立即终止我的服务。如果您有任何关于如何追踪此错误的建议,我将不胜感激。