SystemClock.sleep和Thread.sleep源码分析

一、在android中休眠3s钟有2中方法:

1、SystemClock.sleep(3000);

2、Thread.sleep(3000);


二、通过系统源码区别

1、SystemClock.sleep(long ms)源码:

 public static void sleep(long ms)
    {
        long start = uptimeMillis();
        long duration = ms;
        boolean interrupted = false;
        do {
            try {
                Thread.sleep(duration);
            }
            catch (InterruptedException e) {
                interrupted = true;
            }
            duration = start + ms - uptimeMillis();
        } while (duration > 0);
        
        if (interrupted) {
            // Important: we don't want to quietly eat an interrupt() event,
            // so we make sure to re-interrupt the thread so that the next
            // call to Thread.sleep() or Object.wait() will be interrupted.
            Thread.currentThread().interrupt();
        }
    }
有源码可知SystemClock.sleep还是调用 Thread.sleep
Thread.sleep(long time)源码:
public static void sleep(long time) throws InterruptedException {
        Thread.sleep(time, 0);
    }
  public static void sleep(long millis, int nanos) throws InterruptedException {
        VMThread.sleep(millis, nanos);
    }
最终调用到VMThread类源码,再调用到底层


 static native void sleep (long msec, int nsec) throws InterruptedException;


3、所以在android开发者建议使用 Thread.sleep(long time)方法

你可能感兴趣的:(android开发之路)