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能够更可靠地重新启动服务。