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 {
               <span style="color:#ff0000;"> Thread.sleep(duration);</span>
            }
            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);
    }
最終調用到</span>VMThread類源碼,再調用到底層


<pre name="code" class="java"> static native void sleep (long msec, int nsec) throws InterruptedException;


3、所以在android開發者建議使用Thread.sleep(long time)方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章