【问题标题】:Frequently updating widgets (more frequently than what updatePeriodMillis allows)频繁更新小部件(比 updatePeriodMillis 允许的更频繁)
【发布时间】:2011-03-19 14:59:14
【问题描述】:

我想要一个小部件,显示用户发起的公交车发车跟踪倒计时。我想每分钟左右更新一次小部件,从用户启动跟踪到公共汽车出发(即时间用完)。

此小部件需要比updatePeriodMillis 允许的更新频率更高,即每 30 分钟一次。我估计大约每分钟一次。

作为 Android 编程的新手,我可以想出几种方法来做到这一点,但我可能最终会以一种消耗太多电池等的方式来做,所以我正在寻找更有经验的人的一些见解Android 开发者。

如何启动计时器?如何从我的应用程序运行时访问小部件实例?以此类推。

【问题讨论】:

  • 仅供参考,updatePeriodMillis 更新频率是 30 分钟,而不是秒。

标签: android android-widget


【解决方案1】:

我会每 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 不会唤醒设备,如果它正在休眠,电池寿命不会受到影响。

【讨论】:

  • “我要注册一个警报” - 代码在哪里?你在哪里注册AlarmManager
  • @jjnguy AlarmManager 不需要注册,因为它是从context.getSystemService 收到的。
  • 这根本没有帮助!所有这些代码都去哪里了?对于使用小部件的初学者来说,没有使用它来制作...
  • 这个应该放在类扩展到AppWidgetProvider的地方。在onUpdate 方法上?
  • Virthuss / @natsumiyu,它进入了您知道需要开始更新的用户交互。一旦不再需要快速刷新,不要忘记取消重复警报。不要忘记,您还需要实现一个服务来向自己发送更新意图,这里没有列出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
相关资源
最近更新 更多