我有 3 个任务 A、B 和 C 。我想观察这个链的实时数据,并有一个进度条显示正在进行的工作,一旦工作完成,它应该禁用进度条。

    // One Time work for A class 
         OneTimeWorkRequest Awork = new OneTimeWorkRequest 
                          .Builder(A.class) 
                          .setConstraints(Miscellaneous.networkConstraint()) 
                          .addTag("A") 
                          .build(); 
            //same for B and C 
            //work chain  
           WorkContinuation syncChain = WorkManager.getInstance() 
                              .beginWith(Awork) 
                              .then(Bwork) 
                              .then(Cwork); 
 
         syncChain.enqueue(); 

请您参考如下方法:

只是为了用一个简单的例子来说明答案

final int TASK_COUNT = 4; 
mProgressBar = findViewById(R.id.progressbar); 
mProgressBar.setMax(TASK_COUNT); 
 
// One Time work for A class 
OneTimeWorkRequest Awork = new OneTimeWorkRequest 
              .Builder(A.class) 
              .setConstraints(Miscellaneous.networkConstraint()) 
              .addTag("A") 
              .build(); 
//same for B and C 
//work chain  
WorkContinuation syncChain = WorkManager.getInstance() 
                  .beginWith(Awork) 
                  .then(Bwork) 
                  .then(Cwork); 
 
syncChain.enqueue(); 
 
syncChain.getWorkInfosLiveData().observe(this, new Observer<List<WorkInfo>>() { 
    @Override 
    public void onChanged(List<WorkInfo> workInfos) { 
 
        int finishedCount = 0; 
 
        for (WorkInfo workInfo : workInfos) { 
            if (workInfo.getState().isFinished() && workInfo.getState() == WorkInfo.State.SUCCEEDED) { 
                finishedCount++; 
            } 
        } 
        mProgressBar.setProgress(finishedCount); 
 
        if (finishedCount == workInfos.size()) { 
             mProgressBar.setEnabled(false); 
        } 
    } 
}); 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!