我正在编写一个Android应用小部件,每小时都会使用当前数据进行更新。要更新它,我使用AlarmManager
只能在手机没有睡觉的情况下使用:
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), INTERVAL_SEC * 1000, createFrequentUpdateIntent(context));
但是,我面临以下挑战:当手机长时间醒来后,我希望用户立即看到数据已经过时,因为它已经过几个小时没有更新。因此,如果长时间没有更新,我想以某种方式将数据标记为过时。
我考虑过挂钩SCREEN_ON
事件,但显然这只能通过后台服务实现,强烈建议不要这样做(here和here)。
您对如何做到这一点有什么想法吗?
谢谢!
答案 0 :(得分:0)
也许除了AlarmManager之外,您还可以使用典型的updateTimeMills
更新方法,并且每30米左右调用一次。当您从此方法获得更新时,您可以使用布局的“陈旧数据”版本替换窗口小部件,这样当手机重新启动时,它已经使用陈旧的数据通知重新绘制。
如果在手机开机时触发此更新,您可以检查上次更新的最近时间,然后在数据未过时时忽略它。
我认为这样可行,因为即使手机处于睡眠状态也会调用updateTimeMills
更新,因此当AlarmManager停止时它仍应更新。