0

我正在编写一个 Android 应用程序小部件,它每分钟都会使用当前数据进行更新。要更新它,我正在使用AlarmManager仅在手机未睡着时才有效的方法:

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

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

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

你对如何做到这一点有任何想法吗?

谢谢!

4

1 回答 1

0

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

如果在您的手机开机时触发此更新,您可以检查最近一次更新的时间,如果数据不是陈旧的,则忽略它。

我认为这会起作用,因为updateTimeMills即使手机睡着了也会调用更新,所以当你的 AlarmManager 停止时它仍然应该更新。

于 2012-11-14T06:31:20.003 回答