【发布时间】:2018-07-22 12:59:03
【问题描述】:
我想使用新的 WorkManager 每 3 小时运行一次定期任务。 创建应用程序时启动的工作人员。 我为此使用以下代码:
public class ApplicationCommon extends MultiDexApplication {
@Override
public void onCreate() {
super.onCreate();
... some init code
// some code that I don't want to run again for every periodic worker...
... some analytics
}
MainActivity 内部
@Override
public void onCreate() {
super.onCreate();
runCouponValidatorWorker()
}
fun runCouponValidatorWorker() {
val constraints = Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()
val worker = PeriodicWorkRequestBuilder<CouponValidatorWorker>(3, TimeUnit.HOURS).setConstraints(constraints).build()
WorkManager.getInstance()?.enqueueUniquePeriodicWork("couponValidatorWorker", ExistingPeriodicWorkPolicy.REPLACE, worker)
}
但是,似乎worker在定期运行时,每次都会创建一个Application类的新实例,因此会导致大量init代码再次运行,就好像应用程序再次被用户运行一样(这会导致误报分析、API 调用等)。有没有办法避免这种情况/有一个标志表明应用程序是由工作人员启动的?
【问题讨论】:
-
您使用的是哪个 WorkManager 版本?为什么你在 Application 类而不是 Activity 中编写 WorkManager 代码?
-
1.0.0-alpha04。你是对的(更新的问题),它应该在一个活动课上。无论如何,有没有办法知道应用程序是否因为工人而再次启动?
-
是否写在文档中的某处应该在活动中初始化?我找不到任何想法,而不是 this codelab,它在 ViewModel 中初始化。
标签: android android-workmanager