现象
使用系统接口设置时间生效,查看rtc也设置成功。但是重启后时间为首次开机的时间.
分析
多次测试后发现,设置时间在第一次开机时系统显示的时间之后,重启后时间设置生效;设置在之前,则会还原成第一次系统开机时显示的时间。
所以怀疑时,系统在开机的时候做了时间有效检测.查看AlarmManagerService.java后发现系统会用当前时间和编译固件的时间做对比,如果早于编译时间则使用编译时间为当前时间。
frameworks/base/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
@Overridepublic void onStart() {mInjector.init();mMetricsHelper = new MetricsHelper(getContext(), mLock);mListenerDeathRecipient = new IBinder.DeathRecipient() {@Overridepublic void binderDied() {}@Overridepublic void binderDied(IBinder who) {final IAlarmListener listener = IAlarmListener.Stub.asInterface(who);removeImpl(null, listener);}};synchronized (mLock) {