android - 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 条目会被清空,并且我的应用程序不会重新启动。
但是,两种情况下崩溃的原因是相同的(我通过故意抛出异常来模拟它),所以我不知道为什么有时系统会强制停止我的应用程序,有时会重新启动它。
解决方案
推荐阅读
- python - 从 python 模块正确返回布尔变量
- java - 使用 TestNg 进行 vert.x 测试
- javascript - 从给定键的 JSON 中获取值,其中父键名称是动态的
- python - Django中配置不正确的urls.py
- multithreading - 如果参数不是原语,则不调用颤振计算函数?
- docker - Docker-compose & Traefik 2 & 自定义域路由到本地主机
- angular - 为什么以及何时在 Typescript 中使用 Symbol 数据类型?
- java - 自定义 toString 方法的自定义注解,从 ArrayList 返回前 10 个元素
- c# - 应用程序默认凭据不可用。如果在 .NET C# 中的 Google Compute Engine 中运行,则可以使用它们
- pandas - 值的长度与使用 np.linspace for pandas 的索引长度不匹配