public static void onUiSync(Action action, long waitMillis, int waitNanos, boolean cancelOnTimeOut) {
        if (Looper.myLooper() == Looper.getMainLooper()) {
            action.call();
            return;
        }
        ActionSyncTask poster = new ActionSyncTask(action);
        getUiPoster().sync(poster);
        poster.waitRun(waitMillis, waitNanos, cancelOnTimeOut);
    }
Synchronously
The current thread relative thread synchronization operation,
blocking the current thread,
thread for the main thread to complete
But the current thread just wait for the waitTime long.

@param action          Action Interface
@param waitMillis      wait for the main thread run milliseconds Time
@param waitNanos       wait for the main thread run nanoseconds Time
@param cancelOnTimeOut on timeout the current thread cancel the runnable task
caprice/kit-handler/src/main/java/net/qiujuer/genius/kit/handler/Run.java