Sim*_*rok 5 jobs android schedule android-workmanager
我正在使用 WorkManager 来安排一些任务,但问题是工作管理器在一次调用中多次执行这些任务 { doWork() }。
我在用:
'android.arch.work:work-runtime:1.0.0-alpha08'
Run Code Online (Sandbox Code Playgroud)
我试过使用 -alpha07,06,05,04。但我有同样的问题。有时甚至一次执行 5-6 次
这是代码:
public class MyWorker extends Worker {
@NonNull
@Override
public Result doWork() {
Log.i("CountWorker","0");
sendNotification("Notice", "A notice was sent");
return Result.SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
这是活动
public class MyWorkerActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final PeriodicWorkRequest pwr = new PeriodicWorkRequest
.Builder(MyWorker.class, 16, TimeUnit.MINUTES)
.setConstraints(Constraints.NONE)
.build();
WorkManager.getInstance().enqueue(pwr);
}
}
Run Code Online (Sandbox Code Playgroud)
这是 Logcat 的结果:
09-24 16:44:35.954 22779-22816/com.simran.powermanagement I/CountWorker: 0
09-24 16:44:35.970 22779-22817/com.simran.powermanagement I/CountWorker: 0
09-24 16:44:35.977 22779-22818/com.simran.powermanagement I/CountWorker: 0
Run Code Online (Sandbox Code Playgroud)
当你enqueue一个PeriodicWorkRequest,这并没有取消任何现有的PeriodicWorkRequest您之前排队。因此,当您编写应用程序时,每次活动开始时,您都会添加周期性的工作请求,从 1 到 2 再到 3。
相反,您想使用enqueueUniquePeriodicWork():
此方法允许您将唯一命名的 加入队列
PeriodicWorkRequest,其中一次只能激活一个特定名称的 PeriodicWorkRequest。例如,您可能只想激活一个同步操作。如果有待处理,您可以选择让它运行或替换为您的新工作。该uniqueWorkName唯一标识此PeriodicWorkRequest。
使用代码,例如:
final PeriodicWorkRequest pwr = new PeriodicWorkRequest
.Builder(MyWorker.class, 16, TimeUnit.MINUTES)
.setConstraints(Constraints.NONE)
.build();
WorkManager.getInstance().enqueueUniquePeriodicWork(
"my_worker",
ExistingPeriodicWorkPolicy.REPLACE,
pwr);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1658 次 |
| 最近记录: |