1 /*
2  * Copyright 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package androidx.work;
18 
19 import androidx.annotation.IntRange;
20 
21 import org.jspecify.annotations.NonNull;
22 
23 /**
24  * Can be used to schedule {@link Runnable}s after a delay in milliseconds.
25  * <br/>
26  * This is used by the in-process scheduler to schedule timed work.
27  */
28 public interface RunnableScheduler {
29 
30     /**
31      * Schedules a {@link Runnable} to run after a delay (in milliseconds).
32      *
33      * @param delayInMillis The delay in milliseconds relative to the current time.
34      * @param runnable      The {@link Runnable} to be scheduled
35      */
scheduleWithDelay(@ntRangefrom = 0) long delayInMillis, @NonNull Runnable runnable)36     void scheduleWithDelay(@IntRange(from = 0) long delayInMillis, @NonNull Runnable runnable);
37 
38     /**
39      * Cancels the {@link Runnable} which was previously scheduled using
40      * {@link #scheduleWithDelay(long, Runnable)}.
41      *
42      * @param runnable The {@link Runnable} to be cancelled
43      */
cancel(@onNull Runnable runnable)44     void cancel(@NonNull Runnable runnable);
45 }
46