我目前正在开发 React Native 应用程序并处理 Android 上的后台任务。当应用程序位于后台时,我需要运行一个任务来清除缓存。该任务通过 HeadlessJsTaskService 执行一些 JavaScript 逻辑,超时时间为 4 小时。我正在寻找确保此任务在后台可靠运行的最佳方法,尤其是在现代 Android 版本 (Android 8.0+) 上。
我尝试过的:
服务+HeadlessJsTaskService: 我最初使用后台服务来启动 HeadlessJsTaskService,但这导致了当应用程序因内存不足而被 Android 系统杀死时出现问题,导致崩溃并出现异常 java.lang.IllegalStateException: 尝试在前台启动任务 headlessClearCache,但是这是不允许的。
作业调度程序: 我考虑了 JobScheduler,因为它是为后台工作而设计的,但我遇到了异常 java.lang.IllegalStateException:不允许启动服务 Intent,应用程序位于后台。 这正是我所需要的,它与第一个解决方案完全相反。所以我有点困惑。
工作经理: 我已经看到了使用 WorkManager 执行后台任务的建议,但是,我不确定 WorkManager 是否适合触发 HeadlessJsTaskService。
来自 Google 中小企业的建议:
Android 后台工作的 Google SME 建议继续对 React Native 应用程序使用 HeadlessJsTaskService。他们建议考虑使用 WorkManager 或前台服务来处理在后台运行的任务,并警告说,如果没有自定义 Android 代码,HeadlessJsTaskService 可能无法在较新的 Android 版本上可靠地工作。
这是他们向我推荐的相关 Android 文档。 https://developer.android.com/develop/background-work/background-tasks
以及评论链接https://github.com/facebook/react-native/issues/36816#issuecomment-2214528619
我的问题:
考虑到我的用例(React Native 应用程序需要每 4 小时清除一次缓存),您会推荐什么:
WorkManager + HeadlessJsTaskService?
JobScheduler + HeadlessJsTaskService?
服务+HeadlessJsTaskService?
或者还有其他方法吗?
我需要一个在后台可靠工作并遵循 Android 后台执行最佳实践的解决方案。
非常感谢您对类似任务的任何见解或经验!
提前致谢!
以上都不是。 服务将无法工作,因为它们无法在后台可靠地运行——它们最终会被杀死。 JobScheduler 或 WorkManager 可以使用本机代码,但都不能启动后台服务。 正确的答案可能是不要在 React Native 中执行此操作(整个应用程序,或者至少是后台任务)。