我想使用新的 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)
}
但是,似乎工作人员在定期运行时,每次都会创建 Application 类的新实例,因此会导致大量初始化代码再次运行,就好像应用程序再次被用户运行一样(这会导致错误-积极的分析、API 调用等)。有没有办法避免这种情况/有一个标志表明应用程序是由工作人员启动的?