compat/src/main/java/androidx/core/os/HandlerCompat.java
public static boolean postDelayed(@NonNull Handler handler, @NonNull Runnable r,
            @Nullable Object token, long delayMillis) {
        if (BuildCompat.isAtLeastP()) {
            return handler.postDelayed(r, token, delayMillis);
        }

        Message message = Message.obtain(handler, r);
        message.obj = token;
        return handler.sendMessageDelayed(message, delayMillis);
    }
/**
     * Causes the Runnable r to be added to the message queue, to be run
     * after the specified amount of time elapses.
     * The runnable will be run on the thread to which this handler
     * is attached.
     * <b>The time-base is {@link android.os.SystemClock#uptimeMillis}.</b>
     * Time spent in deep sleep will add an additional delay to execution.
     *
     * @param r The Runnable that will be executed.
     * @param token An instance which can be used to cancel {@code r} via
     *         {@link Handler#removeCallbacksAndMessages}.
     * @param delayMillis The delay (in milliseconds) until the Runnable
     *        will be executed.
     *
     * @return Returns true if the Runnable was successfully placed in to the
     *         message queue.  Returns false on failure, usually because the
     *         looper processing the message queue is exiting.  Note that a
     *         result of true does not mean the Runnable will be processed --
     *         if the looper is quit before the delivery time of the message
     *         occurs then the message will be dropped.
     *
     * @see Handler#postDelayed(Runnable, Object, long)
     */
Causes the Runnable r to be added to the message queue, to be run
after the specified amount of time elapses.
The runnable will be run on the thread to which this handler
is attached.
The time-base is  android.os.SystemClock#uptimeMillis.
Time spent in deep sleep will add an additional delay to execution.

@param r The Runnable that will be executed.
@param token An instance which can be used to cancel  r via
Handler#removeCallbacksAndMessages.
@param delayMillis The delay (in milliseconds) until the Runnable
will be executed.

@return Returns true if the Runnable was successfully placed in to the
message queue.  Returns false on failure, usually because the
looper processing the message queue is exiting.  Note that a
result of true does not mean the Runnable will be processed
if the looper is quit before the delivery time of the message
occurs then the message will be dropped.


Causes the Runnable r to be added to the message queue to be run after the specified amount of time elapses . The runnable will be run on the thread to which this handler is attached . The time - base is android . os . SystemClock#uptimeMillis . Time spent in deep sleep will add an additional delay to execution . @param r The Runnable that will be executed . @param token An instance which can be used to cancel r via Handler#removeCallbacksAndMessages . @param delayMillis The delay ( in milliseconds ) until the Runnable will be executed . @return Returns true if the Runnable was successfully placed in to the message queue . Returns false on failure usually because the looper processing the message queue is exiting . Note that a result of true does not mean the Runnable will be processed if the looper is quit before the delivery time of the message occurs then the message will be dropped .
public static boolean postDelayed(@NonNull Handler handler, @NonNull Runnable r,
            @Nullable Object token, long delayMillis) {
        if (BuildCompat.isAtLeastP()) {
            return handler.postDelayed(r, token, delayMillis);
        }
        Message message = Message.obtain(handler, r);
        message.obj = token;
        return handler.sendMessageDelayed(message, delayMillis);
    }
public static boolean postDelayed ( @ NonNull Handler handler , @ NonNull Runnable r , @ Nullable Object token , long delayMillis ) { if ( BuildCompat . isAtLeastP ( ) ) { return handler . postDelayed ( r , token , delayMillis ) ; } Message message = Message . obtain ( handler , r ) ; message . obj = token ; return handler . sendMessageDelayed ( message , delayMillis ) ; }
Causes the Runnable r to be added to the message queue, to be run
 after the specified amount of time elapses.
Causes the Runnable r to be added to the message queue to be run after the specified amount of time elapses .