我应该在 React Native 应用程序中使用 WorkManager、JobScheduler 还是带有 HeadlessJsTaskService 的服务?

问题描述 投票:0回答:1

我目前正在开发 React Native 应用程序并处理 Android 上的后台任务。当应用程序位于后台时,我需要运行一个任务来清除缓存。该任务通过 HeadlessJsTaskService 执行一些 JavaScript 逻辑,超时时间为 4 小时。我正在寻找确保此任务在后台可靠运行的最佳方法,尤其是在现代 Android 版本 (Android 8.0+) 上。

我尝试过的:

  1. 服务+HeadlessJsTaskService: 我最初使用后台服务来启动 HeadlessJsTaskService,但这导致了当应用程序因内存不足而被 Android 系统杀死时出现问题,导致崩溃并出现异常 java.lang.IllegalStateException: 尝试在前台启动任务 headlessClearCache,但是这是不允许的。

  2. 作业调度程序: 我考虑了 JobScheduler,因为它是为后台工作而设计的,但我遇到了异常 java.lang.IllegalStateException:不允许启动服务 Intent,应用程序位于后台。 这正是我所需要的,它与第一个解决方案完全相反。所以我有点困惑。

  3. 工作经理: 我已经看到了使用 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 后台执行最佳实践的解决方案。

非常感谢您对类似任务的任何见解或经验!

提前致谢!

android react-native background android-workmanager android-jobscheduler
1个回答
0
投票

以上都不是。 服务将无法工作,因为它们无法在后台可靠地运行——它们最终会被杀死。 JobScheduler 或 WorkManager 可以使用本机代码,但都不能启动后台服务。 正确的答案可能是不要在 React Native 中执行此操作(整个应用程序,或者至少是后台任务)。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.