diff options
author | Sumir Kataria <sumir@google.com> | 2018-05-22 11:23:27 -0700 |
---|---|---|
committer | Sumir Kataria <sumir@google.com> | 2018-05-22 12:33:43 -0700 |
commit | bf4f4f72fd27f110b95cc9867fb5dc695d2689b1 (patch) | |
tree | 298f1351a239e883a4899116dc9392cd2c5da2b4 /work/workmanager/src/androidTest/java/androidx | |
parent | 04235d35dad79d4f166443932ac60601a9051029 (diff) | |
download | support-bf4f4f72fd27f110b95cc9867fb5dc695d2689b1.tar.gz |
Add Worker interruption-related methods.
- Worker#isStopped indicates if the Worker is
currently considered interrupted and should stop
its processing.
- Worker#onStopped is called upon interruption
for lightweight cleanup operations.
Change-Id: Idb656029f6594fe6b9953571113c972f39e43cd6
Fixes: 79632247
Test: Added and a ran testInterruption_isMarkedOnRunningWorker
Diffstat (limited to 'work/workmanager/src/androidTest/java/androidx')
-rw-r--r-- | work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java | 26 | ||||
-rw-r--r-- | work/workmanager/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java | 37 |
2 files changed, 63 insertions, 0 deletions
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java index 3dd75719ba3..375c5224201 100644 --- a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java +++ b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java @@ -58,6 +58,7 @@ import androidx.work.worker.ChainedArgumentWorker; import androidx.work.worker.EchoingWorker; import androidx.work.worker.ExceptionWorker; import androidx.work.worker.FailureWorker; +import androidx.work.worker.InterruptionAwareWorker; import androidx.work.worker.RetryWorker; import androidx.work.worker.SleepTestWorker; import androidx.work.worker.TestWorker; @@ -701,6 +702,31 @@ public class WorkerWrapperTest extends DatabaseTest { @Test @SmallTest + public void testInterruption_isMarkedOnRunningWorker() { + OneTimeWorkRequest work = + new OneTimeWorkRequest.Builder(InterruptionAwareWorker.class).build(); + insertWork(work); + + Worker worker = WorkerWrapper.workerFromClassName(mContext, + InterruptionAwareWorker.class.getName(), + work.getStringId(), + new Extras(Data.EMPTY, Collections.<String>emptyList(), null)); + assertThat(worker, is(notNullValue())); + assertThat(worker.isStopped(), is(false)); + + WorkerWrapper workerWrapper = + new WorkerWrapper.Builder(mContext, mDatabase, work.getStringId()) + .withSchedulers(Collections.singletonList(mMockScheduler)) + .withListener(mMockListener) + .withWorker(worker) + .build(); + Executors.newSingleThreadExecutor().submit(workerWrapper); + workerWrapper.interrupt(); + assertThat(worker.isStopped(), is(true)); + } + + @Test + @SmallTest public void testException_isTreatedAsFailure() { OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(ExceptionWorker.class).build(); insertWork(work); diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java new file mode 100644 index 00000000000..30a64149c3a --- /dev/null +++ b/work/workmanager/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java @@ -0,0 +1,37 @@ +/* + * Copyright 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package androidx.work.worker; + +import android.support.annotation.NonNull; + +import androidx.work.Worker; + +public class InterruptionAwareWorker extends Worker { + + @NonNull + @Override + public WorkerResult doWork() { + try { + do { + Thread.sleep(1000L); + } while(!isStopped()); + } catch (InterruptedException e) { + // Do nothing. + } + return WorkerResult.SUCCESS; + } +} |