每次我安装 (运行) 应用程序时执行 WorkManager
WorkManager executing every time when I install (run) app
我通过WorkManager创建了两个Worker。登录成功后每30分钟结算一次
登录后,它成功启动并按预期工作。
MyWorker.java
public class MyWorker extends Worker {
private Context mContext;
public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
mContext = context;
}
@NonNull
@Override
public Result doWork() {
Log.d(TAG, "doWork: Done");
return Result.success();
}
}
登录成功后启动worker。
PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(MyWorker.class, 30, TimeUnit.MINUTES)
.addTag("Location")
.build();
WorkManager.getInstance().enqueueUniquePeriodicWork("Location", ExistingPeriodicWorkPolicy.REPLACE, periodicWork);
问题:
当我 运行 我的应用程序再次执行时。每次我安装 (运行) 我的应用程序时都会发生。
有解决办法吗?
如果您使用 Android Studio 安装和 运行 您的应用程序,这将被归类为强制停止。
如果您的应用使用 PeriodicWork,我们需要重新安排所有工作。因此,每次应用程序进程被 Studio 强制停止时,它都会 运行。
如果您的 workermanager 运行执行周期性任务,就会发生这种情况。如果您可以通过 sharedpreference 中的标志添加检查或检查进程是否已经启动。否则你将不得不卸载然后运行它
我认为你必须使用 ExistingPeriodicWorkPolicy.KEEP
而不是 ExistingPeriodicWorkPolicy.REPLACE
根据document:
REPLACE
ensures that if there is pending work labelled with
uniqueWorkName
, it will be cancelled and the new work will run.
KEEP
will run the new PeriodicWorkRequest
only if there is no
pending work labelled with uniqueWorkName
.
删除 .addTag("Location")
行。
将 ExistingPeriodicWorkPolicy 属性从 REPLACE 更改为 KEEP。
保持其余代码不变。这个应该适合你。
查看 this link 以了解更多信息。
我通过WorkManager创建了两个Worker。登录成功后每30分钟结算一次
登录后,它成功启动并按预期工作。
MyWorker.java
public class MyWorker extends Worker {
private Context mContext;
public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
mContext = context;
}
@NonNull
@Override
public Result doWork() {
Log.d(TAG, "doWork: Done");
return Result.success();
}
}
登录成功后启动worker。
PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(MyWorker.class, 30, TimeUnit.MINUTES)
.addTag("Location")
.build();
WorkManager.getInstance().enqueueUniquePeriodicWork("Location", ExistingPeriodicWorkPolicy.REPLACE, periodicWork);
问题:
当我 运行 我的应用程序再次执行时。每次我安装 (运行) 我的应用程序时都会发生。
有解决办法吗?
如果您使用 Android Studio 安装和 运行 您的应用程序,这将被归类为强制停止。
如果您的应用使用 PeriodicWork,我们需要重新安排所有工作。因此,每次应用程序进程被 Studio 强制停止时,它都会 运行。
如果您的 workermanager 运行执行周期性任务,就会发生这种情况。如果您可以通过 sharedpreference 中的标志添加检查或检查进程是否已经启动。否则你将不得不卸载然后运行它
我认为你必须使用 ExistingPeriodicWorkPolicy.KEEP
而不是 ExistingPeriodicWorkPolicy.REPLACE
根据document:
REPLACE
ensures that if there is pending work labelled withuniqueWorkName
, it will be cancelled and the new work will run.KEEP
will run the newPeriodicWorkRequest
only if there is no pending work labelled withuniqueWorkName
.
删除 .addTag("Location")
行。
将 ExistingPeriodicWorkPolicy 属性从 REPLACE 更改为 KEEP。
保持其余代码不变。这个应该适合你。
查看 this link 以了解更多信息。