以前看過網上有文章分析Android系統的網路時間同步基本上是不靠譜的,原因如下:
- Android的時間同步用的不是基於互連網服務的NTP,而是基於電訊廠商提供的可選服務NITZ。而天朝這種以收費高、服務少聞名的電訊廠商基本上是不會支援的。
- 就算電訊廠商提供NITZ,Android也是只有在系統啟動時才會時間同步。而日常使用時很少重啟手機的,時間一長依然不準確。
因此,以前還專門下一個ClockSync的軟體不時同步一下。不過這個軟體需要root許可權,要實現自動同步的話還得有一個進程常駐後台。最近換新手機後,發現用了一段時間後它的時間還是準確的,便感覺Android現在是支援通過互連網進行網路時間同步的(不大可能是由於天朝電訊廠商突然開恩支援NITZ)。
由於我對Android系統不熟悉,無法像那篇文章的作者那樣通過核心程式碼分析,便手動驗證了一下我的猜測。
我的最初設計的驗證步驟如下:
- 拔掉SIM卡、關閉WiFi、關閉使用網路時間同步
- 手動修改系統時間,將時間提前一小時
- 開啟網路時間同步
- 開啟Wifi,查看時間是否能恢複
另我詫異的是,當進行到步驟3的時候,時間就已經恢複了。由於我拔掉了sim卡,也關閉了wifi,這個時候是沒有任何從外部擷取標準時間的手段的。因此我估計系統內部即使去掉了網路時間同步,仍然記錄著該網路時間的,在恢複網路時間同步設定時先以該時間作為參考恢複到了正確的時間。
由於步驟3恢複了時間導致我的驗證無法進行下去,因此我修改了測試步驟,在開啟網路時間同步前加了一個重啟的操作重設一下系統。
- 拔掉SIM卡、關閉WiFi、關閉使用網路時間同步
- 手動修改系統時間,將時間提前一小時
- 重啟手機
- 開啟網路時間同步
- 開啟Wifi,查看時間是否能恢複
由於有一個重啟的操作,開啟網路時間同步後,系統仍然維持著錯誤的時間(這個也能印證我前面的猜想)。接著進行步驟5,開啟Wifi後,系統馬上自動回復到了正確的時間。
由於此時我的sim卡仍然維持在拔掉的狀態。因此,可以證明Android ICS是可以從互連網同步時間的。並且這個同步不是只在系統啟動的時候才做的,至少在wifi開啟的時候是會同步時間的。因此可以說,在ICS系統及以上版本的系統中,網路時間同步功能是可以用的,只要有可用的互連網串連,不用ClockSync等第三方同步軟體也能自動維持準確的時間。