检测到我的应用小部件的数据不是最新的

时间:2012-11-14 05:47:23

标签: android android-service alarmmanager android-appwidget

我正在编写一个Android应用小部件,每小时都会使用当前数据进行更新。要更新它,我使用AlarmManager只能在手机没有睡觉的情况下使用:

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), INTERVAL_SEC * 1000, createFrequentUpdateIntent(context));

但是,我面临以下挑战:当手机长时间醒来后,我希望用户立即看到数据已经过时,因为它已经过几个小时没有更新。因此,如果长时间没有更新,我想以某种方式将数据标记为过时。

我考虑过挂钩SCREEN_ON事件,但显然这只能通过后台服务实现,强烈建议不要这样做(herehere)。

您对如何做到这一点有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

也许除了AlarmManager之外,您还可以使用典型的updateTimeMills更新方法,并且每30米左右调用一次。当您从此方法获得更新时,您可以使用布局的“陈旧数据”版本替换窗口小部件,这样当手机重新启动时,它已经使用陈旧的数据通知重新绘制。

如果在手机开机时触发此更新,您可以检查上次更新的最近时间,然后在数据未过时时忽略它。

我认为这样可行,因为即使手机处于睡眠状态也会调用updateTimeMills更新,因此当AlarmManager停止时它仍应更新。