【问题标题】:WorkManager observing state with LivedataWorkManager 使用 Livedata 观察状态
【发布时间】: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


    【解决方案1】:

    LiveData 在新观察者注册时重新发布数据,以避免您可以在发布更新后设置布尔值或使用 Rx、SingleLiveData 或 Kotlin Flow 实现它

    【讨论】:

      猜你喜欢
      • 2021-05-11
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      相关资源
      最近更新 更多