java - Android WorkManager PeriodicWorkRequest 问题——应用关闭后不运行

标签 java android-studio android-workmanager firebase-job-dispatcher

我一直在尝试从 Firebase Job Dispatcher 迁移到 androidx Work Manager。我的应用程序与 Job Dispatcher 配合良好。 Work Manager 的问题在于它不会在应用程序关闭后执行 Periodic Work。如果不运行 Periodic Work,用户将无法接收通知。

我的应用正在从 Android Studio 启动的多个像素模拟器(例如 SDK 级别 30)上进行测试。我期望那些模拟器的 Android 行为。我也用实体手机测试过,也遇到了同样的问题。

我一直在寻找解决方案,但到目前为止没有运气。您能否帮助确定原因和解决方案?

这是我的 Java 代码:

    Constraints constraints = new Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build();

    PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(MyClass.class, 15, TimeUnit.MINUTES)
            .addTag("my_tag")
            .setConstraints(constraints)
            .setInitialDelay(15, TimeUnit.MINUTES)
            .build();

    WorkManager.getInstance(appContext)
            .enqueueUniquePeriodicWork("my_unique_work_name", ExistingPeriodicWorkPolicy.REPLACE, periodicWorkRequest);

    Log.d ( "From Work scheduling procedure...", "periodicWorkRequest enqueued" );

这是我在 build.gradle 中的配置(应用级别)

    implementation 'androidx.work:work-runtime:2.4.0'

最佳答案

找了一天多的答案,经过多轮试错,终于找到了答案。问题与我的程序无关,而是 Logcat 的特定行为。

在模拟器上关闭我的应用程序后,我注意到 Logcat 的进程下拉菜单显示“无可调试进程”。这就是我看不到我的调试消息或记录的相关定期工作消息的原因。当我重新启动应用程序时,我的应用程序在下拉菜单中重新显示为可调试进程,并且之前执行的所有 Periodic Work 项都出现在 Logcat 中。

对于我测试过的手机,在连接 USB 数据线的情况下关闭我的应用程序后,我注意到 Logcat 的进程下拉菜单仍然将我的应用程序作为可调试进程。我变得更加耐心地等待和观察。我的 Periodic Work 调试消息出现了。

我的定期工作项目实际上是在我的模拟器和手机上执行的。我没有在 Logcat 中看到日志,我认为我的程序运行不正常。我的程序运行良好,但我对 Logcat 的了解不够。

我在寻找答案的过程中遇到了很多类似的问题。希望我的回答能帮助你们节省一些时间。

Logcat drop-down menus

关于java - Android WorkManager PeriodicWorkRequest 问题——应用关闭后不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63330582/

相关文章:

android - 应用程序在 android 中被杀死后后台服务不工作

java - 线程执行服务

java - 从一个文件高效复制到另一个文件

android - 如何将 32 位 .so 文件转换为适用于 Android 的 64 位 .so 文件

android - 为什么工作管理器不为 21 API 使用 JobScheduler

android - 从 BroadcastReceiver 启动 WorkManager 任务

java - 将 LocalDate 解析为 hashMap Token

Java,异常,最好的方法,考试准备

java - 如何在 requestLocationUpdates 中使用 Looper?

java - Android Studio 中的 R.java 文件在哪里?