android 如何仅在后台或已终止状态下运行Worker?

dy1byipe  于 2023-03-11  发布在  Android
关注(0)|答案(1)|浏览(171)

我希望在有Internet且应用程序处于后台或已终止状态时运行我的辅助进程。我不确定要添加哪个辅助进程约束。
Internet连接状态是否包括NetworkType.CONNECTED,还是应该将其设置为UNMETEREDMETERED

setRequiresDeviceIdle代码是否涵盖背景和终止案例?

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

WorkManager.getInstance(context)
            .enqueue(new PeriodicWorkRequest.Builder(MyWorker.class, 1, TimeUnit.MINUTES)
            .setConstraints(constraints)
            .build());
wf82jlnq

wf82jlnq1#

如果您希望在设备连接到internet时运行您的worker,则可以使用setRequiredNetworkType(NetworkType.CONNECTED)。此约束将确保您的worker仅在设备连接到internet时运行,而不管网络类型如何。
但是,如果您想进一步将网络类型限制为按流量计费或不按流量计费的网络,则可以分别使用setRequiredNetworkType(NetworkType.METERED)setRequiredNetworkType(NetworkType.UNMETERED)
对于setRequiresDeviceIdle()方法,此约束确保您的工作线程仅在设备空闲时运行,这意味着屏幕关闭并且没有用户活动。此约束不会覆盖应用程序的后台或已终止状态。
若要在应用程序处于后台或已终止状态时运行辅助进程,可以使用setRequiresBatteryNotLow()setRequiresStorageNotLow()约束。这些约束可确保辅助进程仅在设备电池电量和存储空间充足时运行。
因此,当设备连接到Internet并且应用程序处于后台或已终止状态时,您可以使用以下约束来运行您的工作器:

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

请注意,您可能还希望考虑使用setBackoffCriteria()来处理由于网络问题或其他原因导致工作机无法运行的情况。

相关问题