如何清除Android中由WorkManager创建的WorkStatus?

Jam*_*min 3 android-livedata android-architecture-components android-workmanager

我创建一些OneTimeWorkRequest当我使用android-arch work WorkManager时。

我可以看WorkStatus通过这样的观察员

final WorkManager workManager = WorkManager.getInstance();
final LiveData<List<WorkStatus>> workStatus =
    workManager.getStatusesByTag(DailyWorker.DAILY_WORK);
observer = new Observer<List<WorkStatus>>() {
  @Override public void onChanged(@Nullable List<WorkStatus> workStatuses) {
    Log.d("WorkManager", "onChanged  = workStatuses = " + workStatuses);
    if (workStatuses == null || workStatuses.size() == 0) {
      //DailyWorker.createNewPeriodWork();
    } else {
      Log.d("WorkManager ", "onChanged  = workStatuses.size() = " + workStatuses.size());
      for (int i = 0; i < workStatuses.size(); i++) {
        Log.d("WorkManager ", "onChanged Work Status Id: " + workStatuses.get(i).getId());
        Log.d("WorkManager ", "onChanged Work Status State: " + workStatuses.get(i).getState());
      }
    }
    workStatus.removeObserver(observer);
  }
};
workStatus.observe(this, observer);
Run Code Online (Sandbox Code Playgroud)

我的Android arch版本是 android.arch.work:work-runtime:1.0.0-alpha02

但是WorkStatus,列表中有很多?一些SUCCEEDED,一些ENQUEUED,一些CANCELLED,并且列表的数量继续增加。如何清除工作状态列表?

Cod*_*ice 11

您可以pruneWork()在WorkManager上调用方法以清除List<WorkStatus>

myWorkManager.pruneWork();
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!

  • 我希望它有一个像“pruneWorkByTag”这样的方法来仅清除特定的任务组...... (3认同)