有什么方法可以检查WorkManager是否正常工作?

时间:2019-01-14 10:11:01

标签: android android-architecture-components android-workmanager

我们可以通过打开并查看ActivitiesFragments来检查它们是否正常工作。但是,由于WorkManager使用的时间不精确,并且更像是后台服务,因此此处不能使用相同的方法。如何验证WorkManager是否运行以及我打算做什么?

3 个答案:

答案 0 :(得分:2)

您可以使用以下方法启动workManager类,并可以保留其实例。

public static OneTimeWorkRequest getInstance() {
    if (workRequest == null) {
        workRequest = new OneTimeWorkRequest.Builder(YourClass.class)
                .addTag("your_tag")
                .build();
    }
    return workRequest;
}

您可以使用getStatusByIdgetStatusesByTag观察工人

WorkManager.getInstance().getStatusById(getInstance().getId()).observe(this, new Observer<WorkStatus>() {
            @Override
            public void onChanged(@Nullable WorkStatus workStatus) {
                if (workStatus != null) {
                    Log.e("mylog", "onOptionsItemSelected: " + workStatus.getId() + " -> " + workStatus.getState());
                }
            }
        });

        WorkManager.getInstance().getStatusesByTag("your_tag").observe(this, new Observer<List<WorkStatus>>() {
            @Override
            public void onChanged(@Nullable List<WorkStatus> workStatuses) {
                if (workStatuses != null && !workStatuses.isEmpty()) {
                    for (WorkStatus status : workStatuses) {
                        Log.d("mylog", "onOptionsItemSelected: "+ status.getId() + " -> " + status.getState());
                     }
                } 
            }
        });

docs

答案 1 :(得分:0)

您还可以使用WorkManager测试工件。您无需测试WorkManager。您应该测试Worker之间的交互。

答案 2 :(得分:0)

您可以观察和监视工作经理的状态。工作经理可以是六个不同的states之一。 根据官方文档here, 您使用以下代码

$Servers

对于Kotlin,

WorkManager.getInstance(myContext).getWorkInfoByIdLiveData(uploadWorkRequest.getId())
        .observe(lifecycleOwner, new Observer<WorkInfo>() {
            @Override
            public void onChanged(@Nullable WorkInfo workInfo) {
              if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) {
                  displayMessage("Work finished!")
              }
            }
        });