@Override public boolean isPlatformJobScheduled(JobRequest request) { List<WorkInfo> infos = getWorkStatusBlocking(createTag(request.getJobId())); if (infos == null || infos.isEmpty()) { return false; } WorkInfo.State state = infos.get(0).getState(); return state == WorkInfo.State.ENQUEUED; }
public void runJob(String tag) { WorkManagerTestInitHelper.getTestDriver().setInitialDelayMet(getWorkStatus(tag).get(0).getId()); }
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_work); //3、加入任务管理,但不是执行,执行的代码稍后 WorkManager.getInstance().enqueue(workRequest); //4、通过workRequest的唯一标记id,来操作request,并获取返回数据 //todo 这里因为在oncreate中执行,会先与work执行,toast会弹出未执行work的空结果,work变化后,还会显示出成功后的结果。这是因为observe监测worker的status变化 enqueued、RUNNING、successed、retry、failure等 WorkManager.getInstance().getWorkInfoByIdLiveData(workRequest.getId()) .observe(this, workStatus -> { //接收从worker中返回的任务结果,最好在这里判断status为success再做具体操作 if (workStatus.getState() == WorkInfo.State.SUCCEEDED) { Data data = workStatus.getOutputData(); String result = data.getString("result"); int status = data.getInt("status", 0); Toast.makeText(WorkActivity.this, "result: " + result + " status: " + status, Toast.LENGTH_SHORT).show(); Log.i("WorkActivity", "workStatus: " + workStatus.getState().name()); } }); }
boolean finished = workInfo.getState().isFinished(); if (!finished) { showWorkInProgress(); Data outputData = workInfo.getOutputData();
@Test public void testCancel() { int jobId = new JobRequest.Builder(TAG) .setExecutionWindow(TimeUnit.HOURS.toMillis(4), TimeUnit.HOURS.toMillis(5)) .build() .schedule(); JobRequest request = mWorkManagerRule.getManager().getJobRequest(jobId); JobProxyWorkManager jobProxyWorkManager = new JobProxyWorkManager(InstrumentationRegistry.getTargetContext()); assertThat(jobProxyWorkManager.isPlatformJobScheduled(request)).isTrue(); String tag = JobProxyWorkManager.createTag(jobId); List<WorkInfo> statuses = mWorkManagerRule.getWorkStatus(tag); assertThat(statuses).isNotNull().hasSize(1); assertThat(statuses.get(0).getState()).isEqualTo(WorkInfo.State.ENQUEUED); mWorkManagerRule.getManager().cancel(jobId); assertThat(mWorkManagerRule.getWorkStatus(tag).get(0).getState()).isEqualTo(WorkInfo.State.CANCELLED); assertThat(jobProxyWorkManager.isPlatformJobScheduled(request)).isFalse(); }
@SuppressWarnings("ConstantConditions") private void testConstraints(JobRequest.Builder builder) { int jobId = builder .setRequiredNetworkType(JobRequest.NetworkType.METERED) .setRequiresBatteryNotLow(true) .setRequiresCharging(true) .setRequiresDeviceIdle(true) .setRequiresStorageNotLow(true) .build() .schedule(); String tag = JobProxyWorkManager.createTag(jobId); List<WorkInfo> statuses = mWorkManagerRule.getWorkStatus(tag); assertThat(statuses).isNotNull().hasSize(1); assertThat(statuses.get(0).getState()).isEqualTo(WorkInfo.State.ENQUEUED); mWorkManagerRule.getManager().cancelAllForTag(TAG); assertThat(mWorkManagerRule.getWorkStatus(tag).get(0).getState()).isEqualTo(WorkInfo.State.CANCELLED); } }
mWorkManagerRule.runJob(tag); WorkInfo.State state = mWorkManagerRule.getWorkStatus(tag).get(0).getState();
@BindingAdapter("android:enabled") public static void setEnabled(View v, WorkInfo info) { if (info==null) { v.setEnabled(true); } else { v.setEnabled(info.getState().isFinished()); } }
@BindingAdapter("android:enabled") public static void setEnabled(View v, WorkInfo info) { if (info==null) { v.setEnabled(true); } else { v.setEnabled(info.getState().isFinished()); } }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final DownloadViewModel vm=ViewModelProviders.of(this).get(DownloadViewModel.class); binding=ActivityMainBinding.inflate(getLayoutInflater()); binding.setViewModel(vm); binding.setLifecycleOwner(this); setContentView(binding.getRoot()); vm.liveWorkStatus.observe(this, workStatus -> { if (workStatus!=null && workStatus.getState().isFinished()) { Toast.makeText(this, R.string.msg_done, Toast.LENGTH_LONG).show(); } }); } }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final DownloadViewModel vm=ViewModelProviders.of(this).get(DownloadViewModel.class); binding=ActivityMainBinding.inflate(getLayoutInflater()); binding.setViewModel(vm); binding.setLifecycleOwner(this); setContentView(binding.getRoot()); vm.liveWorkStatus.observe(this, workStatus -> { if (workStatus!=null && workStatus.getState().isFinished()) { Toast.makeText(this, R.string.msg_done, Toast.LENGTH_LONG).show(); } }); } }
public void doTheDownload() { Constraints constraints=new Constraints.Builder() .setRequiredNetworkType(NetworkType.CONNECTED) .setRequiresBatteryNotLow(true) .build(); OneTimeWorkRequest downloadWork= new OneTimeWorkRequest.Builder(DownloadWorker.class) .setConstraints(constraints) .setInputData(new Data.Builder() .putString(DownloadWorker.KEY_URL, "https://commonsware.com/Android/Android-1_0-CC.pdf") .putString(DownloadWorker.KEY_FILENAME, "oldbook.pdf") .build()) .addTag("download") .build(); WorkManager.getInstance().enqueue(downloadWork); final LiveData<WorkInfo> liveOpStatus= WorkManager.getInstance().getWorkInfoByIdLiveData(downloadWork.getId()); liveWorkStatus.addSource(liveOpStatus, workStatus -> { liveWorkStatus.setValue(workStatus); if (workStatus.getState().isFinished()) { liveWorkStatus.removeSource(liveOpStatus); } }); } }
liveWorkStatus.setValue(workStatus); if (workStatus.getState().isFinished()) { liveWorkStatus.removeSource(liveOpStatus);