首页 > 解决方案 > Android WorkManager *偶尔*在应用程序崩溃后停止调度作业

问题描述

我使用 aWorkManager在我的应用程序中安排定期后台工作。几个月来一直运行良好。即使应用程序崩溃,它也会在一段时间后重新启动应用程序。

但就在最近,我注意到有时WorkManager应用程序崩溃后会停止安排新工作,但这只是偶尔发生。这很麻烦,因为即使在同一部手机上,这种行为也无法可靠地重现。

(我知道WorkManager应用程序关闭后的行为取决于手机制造商,但这一切都发生在完全相同的手机上。)

我所做的是通过在工作RunTimeException时在某处扔一个新的来模拟崩溃。Worker然后我检查作业调度程序的状态:

adb shell dumpsys jobscheduler | grep JOB.*my_app

有时,我会在崩溃后看到应用程序的条目,有时,我会没有条目。我已经确认,如果调度程序中有条目,我的应用程序将在崩溃后一段时间后重新启动;如果没有条目,我的应用程序将永远不会重新启动。

是否有某种原因WorkManager会在崩溃后停止调度工作,并且只在某些时候这样做?

更新 经过进一步调查,我发现有时当应用程序崩溃时,我得到:

I/ActivityManager: Process [my_app] (pid 32763) has died: fore  +50 TOP 
W/ActivityManager: Scheduling restart of crashed service ...
W/ActivityManager: Scheduling restart of crashed service ...
...
I/ActivityManager: Start proc 644:my_app/u0a232 for service {...}

发生这种情况时,JobScheduler将显示应用程序的条目并稍后重新启动。

但是,有时我会得到:

I/ActivityManager: Process [my_app] (pid 32763) has died: fore  +50 TOP 
W/ActivityManager: Scheduling restart of crashed service ...
W/ActivityManager: Scheduling restart of crashed service ...
...
I/ActivityManager: Force stopping my_app appid=10232 user=0: from pid 31293
I/ActivityManager:   Force stopping service ServiceRecord{...}
I/ActivityManager:   Force stopping service ServiceRecord{...}

在这些情况下,我的应用程序的 JobScheduler 条目会被清空,并且我的应用程序不会重新启动。

但是,两种情况下崩溃的原因是相同的(我通过故意抛出异常来模拟它),所以我不知道为什么有时系统会强制停止我的应用程序,有时会重新启动它。

标签: androidandroid-workmanager

解决方案


推荐阅读