经常更新小部件(比updatePeriodMillis允许的更频繁)

17
我想要一个小工具,显示用户发起的追踪公交车出发时间的倒计时。我希望从用户开始追踪到公交车出发(即时间用完)期间每分钟更新一次该小工具。
这个小工具需要比updatePeriodMillis允许的更频繁地更新,后者是每30分钟更新一次。我估计大约每分钟更新一次。
作为一个新手安卓程序员,我能够想到几种方法来解决这个问题,但最终可能会消耗太多电量等资源,因此我正在寻求来自更有经验的安卓开发者的见解。
我应该如何启动计时器?如何在应用程序运行时访问小工具实例?等等。

9
请注意,updatePeriodMillis 的更新频率是30 分钟,而不是秒。 - Henrique de Sousa
1个回答

29

我想注册一个闹钟,每隔1分钟启动我的服务,并且服务将更新小部件UI。

final Intent intent = new Intent(context, UpdateService.class);
final PendingIntent pending = PendingIntent.getService(context, 0, intent, 0);
final AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pending);
long interval = 1000*60;
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),interval, pending);

如果设备处于睡眠状态,则AlarmManager.ELAPSED_REALTIME不会唤醒设备,以保护电池寿命。


5
"我会注册一个闹钟" - 那段代码放在哪里?你要在哪里注册AlarmManager - jjnguy
1
@jjnguy AlarmManager不需要注册,因为它是从context.getSystemService接收到的。 - Simon Forsberg
5
完全没有帮助!这些代码应该放在哪里?对于使用widget的初学者来说,这样做毫无用处... - Virthuss
1
这应该放在类扩展到 AppWidgetProvider 的位置上吗?放在 onUpdate 方法中吗? - natsumiyu
Virthuss / @natsumiyu,它进入用户交互的领域,您知道需要开始更新。一旦不再需要快速刷新,请不要忘记取消重复闹钟。不要忘记您还需要实现一个服务来向自己发送更新意图,该服务未在此处列出。 - TWiStErRob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接