【发布时间】:2020-09-30 12:27:52
【问题描述】:
我正在使用 OneTimeWorkRequest 做一些工作并使用 getWorkInfosByTagLiveData() 观察其状态,在应用程序被终止和/或重新创建活动并在 onCreate() 中再次创建观察者之后,我正在接收最近完成的工作信息和toast 消息被触发,我认为 WorkManager 以某种方式缓存了最近完成的 workInfos。我只想在当前运行状态更改的工作而不是在活动重新创建之后显示 toast。
视图模型
public class MainViewModel extends ViewModel {
private static final String POST_WORKER_TAG = "WorkerTag";
private LiveData<List<WorkInfo>> workInfo;
@ViewModelInject
public MainViewModel(WorkManager workManager) {
this.workManager = workManager;
this.workInfo = workManager.getWorkInfosByTagLiveData(POST_WORKER_TAG);
}
public LiveData<List<WorkInfo>> getWorkInfo() {
return workInfo;
}
public void startPostWorker() {
OneTimeWorkRequest postRequestWorker = new OneTimeWorkRequest.Builder(PostRequestWorker.class)
.addTag(POST_WORKER_TAG)
.build();
workManager.enqueue(postRequestWorker);
}
在活动 onCreate()
MainViewModel mainViewModel = new ViewModelProvider(this).get(MainViewModel.class);
mainViewModel.getWorkInfo().observe(this, workInfos -> {
if (workInfos != null && !workInfos.isEmpty()) {
WorkInfo workInfo = workInfos.get(workInfos.size() - 1);
if (workInfo.getState() == WorkInfo.State.ENQUEUED) {
Toast.makeText(context, "ENQUEUED", Toast.LENGTH_SHORT).show();
} else if (workInfo.getState() == WorkInfo.State.SUCCEEDED) {
Toast.makeText(context, "SUCCEEDED", Toast.LENGTH_SHORT).show();
} else if (workInfo.getState() == WorkInfo.State.FAILED) {
Toast.makeText(context, "FAILED", Toast.LENGTH_SHORT).show();
}
}
});
【问题讨论】:
标签: android android-livedata android-workmanager