[RK3288][Android6.0] WiFi之网络时间定期同步更新

来源:互联网 发布:微信朋友圈数据采集 编辑:程序博客网 时间:2024/05/19 03:42

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

前面有分析了网络时间同步过程,每次开机的时候会同步时间,现在有考虑到一个问题,当一直开机的时候,由于RTC的硬件可能偏移从而导致时间错误的可能,那么NetworkTimeUpdateService这一块有没有定期更新呢,事实上是有的,利用的是alarm和广播机制

NetworkTimeUpdateService.java

private void registerForAlarms() {    //注册一个广播    mContext.registerReceiver(        new BroadcastReceiver() {            @Override            public void onReceive(Context context, Intent intent) {                mHandler.obtainMessage(EVENT_POLL_NETWORK_TIME).sendToTarget();            }        //对应的intent是ACTION_POLL        }, new IntentFilter(ACTION_POLL));}

ACTION_POLL在哪里被创建呢

public NetworkTimeUpdateService(Context context) {    //创建一个Intent    Intent pollIntent = new Intent(ACTION_POLL, null);    //通过Intent得到PendingIntent    mPendingPollIntent = PendingIntent.getBroadcast(mContext, POLL_REQUEST, pollIntent, 0);}

mPendingPollIntent会被alarm用到

private void resetAlarm(long interval) {    mAlarmManager.cancel(mPendingPollIntent);    long now = SystemClock.elapsedRealtime();    long next = now + interval;    //alarm到期后广播mPendingPollIntent到对应的Intent    mAlarmManager.set(AlarmManager.ELAPSED_REALTIME, next, mPendingPollIntent);}

resetAlarm()在onPollNetworkTimeUnderWakeLock()被调用

private void onPollNetworkTimeUnderWakeLock(int event) {  resetAlarm(mPollingIntervalMs);}

mPollingIntervalMs在framework/base/core/res/res/values/config.xml配置,为864000000
也就是说过了每10天后,系统做一次网络时间同步。

另外,在WiFi网络有切换时,也会触发时间同步,参见registerForConnectivityIntents()

参考:
Android 结合AlarmManager浅谈Intent和PendingIntent

原创粉丝点击