1拴竹、System.currentTimeMillis() 獲取的是系統(tǒng)時(shí)間悟衩,也就是當(dāng)前時(shí)刻與1970年1月1號(hào)0時(shí)0分0秒的差值剧罩,單位毫秒∽荆可以使用 SystemClock.setCurrentTimeMillis(long millis) 進(jìn)行設(shè)置惠昔。該時(shí)間可以被系統(tǒng)設(shè)置修改,通過(guò)監(jiān)聽(tīng) ACTION_TIME_TICK挑势、ACTION_TIME_CHANGED 和 ACTION_TIMEZONE_CHANGED 這些廣播 ACTION镇防,來(lái)響應(yīng)系統(tǒng)時(shí)間的變化。
2潮饱、SystemClock.uptimeMillis() 當(dāng)前時(shí)刻與開(kāi)機(jī)時(shí)刻的差值来氧,不包括系統(tǒng)深度睡眠(CPU停止運(yùn)行、屏幕息屏、等待外部輸入)啦扬,但是不會(huì)受到時(shí)鐘縮放中狂、時(shí)鐘限制時(shí)間或其他節(jié)能機(jī)制的影響,單位毫秒扑毡。這個(gè)時(shí)鐘是保證單調(diào)性胃榕,適用于計(jì)算同一個(gè)設(shè)備的時(shí)間間隔。
3瞄摊、SystemClock.elapsedRealtime() 當(dāng)前時(shí)刻與開(kāi)機(jī)時(shí)刻的差值勋又,它包含了深度睡眠時(shí)間。
幾種控制機(jī)制:
(1)標(biāo)準(zhǔn)函數(shù) Thread.sleep(millis) 和 Object.wait(millis) 换帜,如果這兩個(gè)函數(shù)使用 SystemClock.uptimeMillis() 時(shí)鐘楔壤,當(dāng)設(shè)備進(jìn)入休眠狀態(tài)時(shí),提醒時(shí)間可能會(huì)被推遲到設(shè)備喚醒以后膜赃。并且這些同步函數(shù)可以被 Thread.interrupt() 打斷挺邀。
(2)SystemClock.sleep(millis) 是一個(gè)工具函數(shù),類(lèi)似于 Thread.sleep(millis)跳座,不同的是它忽略了 InterruptedException 異常端铛,如果你用不到 Thread.interrupt() 的話(huà),就可以使用這個(gè)函數(shù)來(lái)延遲疲眷。
(3)Handler 可以在一個(gè)絕對(duì)或者相對(duì)的時(shí)間里同步的調(diào)度 Runnable 對(duì)象禾蚕,它可以使用 SystemClock.uptimeMillis() 時(shí)鐘。
(4)AlarmManager 可以設(shè)置一個(gè)定時(shí)器事件狂丝,當(dāng)時(shí)間到來(lái)的時(shí)候换淆,不管設(shè)備是否處于深度睡眠或者正在運(yùn)行,事件都會(huì)發(fā)生几颜。