提问人:shadygoneinsane 提问时间:7/17/2023 更新时间:7/17/2023 访问量:37
ListenableWorker 的 onStopped() 在执行代码时被意外调用
ListenableWorker's onStopped() gets called unexpectedly while executing code
问:
短篇小说:
我有一个执行任务,涉及从本地数据库获取数据并对此数据进行检查。但是,我注意到有时在我的代码仍在执行时调用工作线程的方法。这引发了对可能持续 12-18 小时的长时间运行任务期间潜在问题的担忧。我不确定这是如何发生的,以及它是否会导致保持工人活着的问题。
长话短说:
在我的应用程序中,我需要在用户选择的开始时间运行用户定义的持续时间的任务。
例如:用户可以指定在晚上 10:00 运行此任务半小时
或从上午 9 点开始运行此任务 12 小时,开始时间和持续时间都由用户
选择 为了解决这个问题,我使用 WorkManager/Alarms 将开始时间和持续时间存储在本地数据库中,
并利用 WorkManager/警报来启动工作。
以前,我使用前台通知服务来执行长时间运行的任务,但由于 Android 12 中引入的限制,我将迁移到 WorkManager。
我目前管理 WorkManager 的 Listenable Worker 并在指定持续时间内保持其活动状态的方法如下:
- My Worker 是我使用的类型,它是从 startWork() 返回的,因为它作为返回类型
- 在我从房间数据库中获取数据,执行各种检查并应用逻辑
- 我还注册了一个来监听特定的用户操作。
- 如果一切正常,我会调用以保持工作线程运行,并使用相同的方式向用户显示通知。
- 如果我需要在完成整个任务之前停止工作线程,我会使用 on 返回自 .
- 我使用一个带有延迟的,它在用户指定的持续时间之后触发,在指定的持续时间之后,我调用相同的时间来停止工作线程。ListenableWorker
onStopped()
Room
ListenableWorker
ResolvableFuture<Result>
ListenableFuture<Result>
startWork()
BroadcastReceiver
setForegroundAsync()
set(Result.failure())
ResolvableFuture<Result>
startWork()
Handler()
Runnable
set(Result.Success())
ResolvableFuture<Result>
现在我有两个顾虑:
1)我不确定这种方法是否适合我的用例,以及是否有其他选项可以从后台处理这种长时间运行的工作。
2) 我遇到了一个问题,即在我的代码仍在执行时调用了 ListenableWorker 的 onStopped() 回调。
我将不胜感激任何关于为什么会发生这种情况以及我应该考虑的改进或替代方法的见解或建议。
提前感谢您提供的任何帮助或指导。
答: 暂无答案
评论