Android WorkManager*偶尔*会在应用程序崩溃后停止调度作业

Android WorkManager*偶尔*会在应用程序崩溃后停止调度作业,android,android-workmanager,Android,Android Workmanager,我使用WorkManager在我的应用程序中定期安排后台工作。这几个月来一直运作良好。即使应用程序崩溃,它也会在一段时间后重新启动应用程序 但就在最近,我注意到在应用程序崩溃后,WorkManager有时会停止安排新工作,但这种情况只是偶尔发生。这很麻烦,因为即使在同一部手机上,行为也无法可靠地再现 (我知道应用程序关闭后,WorkManager的行为取决于手机制造商,但这一切都发生在同一部手机上。) 我所做的是模拟一个崩溃,当一个工作者正在工作时,在某处抛出一个新的RunTimeExcepti

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

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

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

我所做的是模拟一个崩溃,当一个
工作者正在工作时,在某处抛出一个新的
RunTimeException
。然后检查作业计划程序的状态:

adb shell dumpsys jobscheduler | grep JOB.*my_app
有时,我会在崩溃后看到应用程序的条目,有时则没有条目。我已经确认,如果计划程序中有条目,我的应用程序将在崩溃后一段时间重新启动;如果没有条目,我的应用程序将永远不会重新启动

是否有某种原因导致
工作管理器在崩溃后停止安排工作,并且只在有时才这样做

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

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条目将清空,我的应用程序将不会重新启动


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

WorkManager有不同的方法来调度您的工作人员,具体取决于您是否有一个活动进程(使用内部调度程序)。您可以在上打开一个bug来对此进行调查。您知道如何重新启动崩溃的服务了吗?没有。相反,我更努力地防止撞车;)仍然希望WorkManager能够更可靠地重新启动服务。WorkManager有不同的方法来安排工作人员,具体取决于您是否有活动进程(使用内部计划程序)。您可以在上打开一个bug来对此进行调查。您知道如何重新启动崩溃的服务了吗?没有。相反,我更努力地防止撞车;)但仍然希望WorkManager能够更可靠地重新启动服务。