1铅歼、兩種時(shí)間的區(qū)別:
- 1蛔翅、System.currentTimeMillis()獲取的是系統(tǒng)的時(shí)間乘盖,可以使用SystemClock.setCurrentTimeMillis(long millis)進(jìn)行設(shè)置呐赡。如果使用System.currentTimeMillis()來(lái)獲取當(dāng)前時(shí)間進(jìn)行計(jì)時(shí),應(yīng)該考慮監(jiān)聽(tīng)ACTION_TIME_TICK, ACTION_TIME_CHANGED 和 ACTION_TIMEZONE_CHANGED這些廣播ACTION焚虱,如果系統(tǒng)時(shí)間發(fā)生了改變,可以通過(guò)監(jiān)聽(tīng)廣播來(lái)獲取懂版。
- 2鹃栽、SystemClock.uptimeMillis()表示系統(tǒng)開(kāi)機(jī)到當(dāng)前的時(shí)間總數(shù),單位是毫秒躯畴,但是民鼓,當(dāng)系統(tǒng)進(jìn)入深度睡眠(CPU休眠、屏幕休眠蓬抄、設(shè)備等待外部輸入)時(shí)間就會(huì)停止丰嘉,但是不會(huì)受到時(shí)鐘縮放、空閑或者其他節(jié)能機(jī)制的影響嚷缭。
- 3饮亏、SystemClock.elapsedRealtime()和SystemClock.elapsedRealtimeNanos()表示系統(tǒng)開(kāi)機(jī)到當(dāng)前的時(shí)間總數(shù)。它包括了系統(tǒng)深度睡眠的時(shí)間阅爽。這個(gè)時(shí)鐘是單調(diào)的路幸,它保證一直計(jì)時(shí),即使CPU處于省電模式付翁,所以它是推薦使用的時(shí)間計(jì)時(shí)器简肴。
2、有幾種機(jī)制百侧,用來(lái)控制事件時(shí)間:
- 1砰识、標(biāo)準(zhǔn)函數(shù)Thread.sleep(millis)和Object.wait(millis)是一直被使用的。如果這些函數(shù)使用SystemClock.uptimeMillis()時(shí)鐘佣渴,如果設(shè)備進(jìn)入休眠狀態(tài)辫狼,那么提醒時(shí)間可能會(huì)被推遲到設(shè)備喚醒。并且這些同步函數(shù)可以被Thread.interrupt()打斷观话。
- 2予借、SystemClock.sleep(millis)是一個(gè)工具函數(shù)類似于Thread.sleep(millis),不同的是它忽略了InterruptedException異常频蛔,如果你不使用Thread.interrupt()的話灵迫,就可以使用這個(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ā)生修噪。