哪种技术最适合在 android 中每分钟更新一次主屏幕应用程序小部件?

Which technique is best for updating homescreen app widgets every minute in android?

我有两种类型的主屏幕应用程序小部件 1. 由文本视图组成,2. 由列表视图组成。第一个显示阵列中的数据,第二个显示来自服务器的信息(即涉及网络操作)。它们都需要每分钟更新一次。现在对于每种情况,以下哪种技术最好?

a) Handler
b) Alarm Manager
c) JobScheduler
d) Firebase JobDispatcher
e) SyncAdapter
f) ..anything else if there is...

作为 android 的初学者,很难决定哪种技术最适合设备的电池寿命。提前感谢您的帮助。

As a beginner to android it is difficult to decide which technique is the best for the battery life of the devices

答案是"none of the above — do not attempt to update app widgets once per minute"。 Google 会竭尽全力阻止您做这种事情,因为用户厌倦了应用程序开发人员浪费电池寿命。

Handler

Handler 与您要解决的问题无关。您可以使用 HandlerpostDelayed() 来实现进程内计时循环,但您也可以使用经典的 Java 解决方案,例如 ScheduledExecutorService.

但是:

  • 这要求您始终有一个进程 运行ning。从 Android O 开始,这将要求您拥有前台服务,这意味着您必须显示 Notification。用户对此以及似乎无缘无故不断消耗系统 RAM 的应用程序感到恼火。而且,在实践中,你不可能一直有一个进程 运行ning,尽管有一个粘性的前台服务,你可以接近。

  • 当设备在 Android 6.0+ 上处于打瞌睡模式时,这不会更新应用小部件。

  • 这不会在设备处于睡眠状态时更新应用小部件。

Alarm Manager

AlarmManager 将允许您不必一直有一个 运行ning 进程。但是,当设备在 Android 6.0+ 上处于打瞌睡模式时,这不会更新应用小部件。

JobScheduler

JobScheduler 作业不精确(即,您无法准确控制它们何时 运行),我不知道它们是否可以每分钟调用一次。此外,当设备在 Android 6.0+ 上处于打瞌睡模式时,这不会更新应用程序小部件,并且当设备在 Android 7.0+ 上处于部分打瞌睡模式时,它不会更新应用程序小部件。

Firebase JobDispatcher

这需要您有一台服务器,用于管理注册并每分钟发送高优先级 FCM 消息。我的猜测是 Google 最终会阻止服务器这样做。

SyncAdapter

您无法准确控制同步发生的时间。此外,当设备在 Android 6.0+ 上处于打瞌睡模式时,这不会更新应用程序小部件,并且当设备在 Android 7.0+ 上处于部分打瞌睡模式时,它不会更新应用程序小部件。