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

Bis*_*ash -1 service android scheduling handler alarmmanager

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

a) Handler
b) Alarm Manager
c) JobScheduler
d) Firebase JobDispatcher
e) SyncAdapter
f) ..anything else if there is...
Run Code Online (Sandbox Code Playgroud)

作为 Android 初学者,很难决定哪种技术最适合设备的电池寿命。我在这里先向您的帮助表示感谢。

Com*_*are 6

作为 Android 初学者,很难决定哪种技术最适合设备的电池寿命

答案是“以上都不是——不要尝试每分钟更新一次应用程序小部件”。谷歌会竭尽全力阻止你做这种事情,因为用户厌倦了应用程序开发人员浪费电池寿命。

处理程序

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

然而:

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

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

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

报警管理器

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

JobScheduler

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

Firebase 作业调度程序

这要求您拥有一台服务器来管理注册并每分钟发送高优先级 FCM 消息。我的猜测是谷歌最终会阻止服务器这样做。

同步适配器

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

  • @TKB:“将数字时钟实现为主屏幕而不是应用程序小部件的功能是什么意思?” -- 编写一个主屏幕。作为编写主屏幕的一部分,添加数字时钟作为一项功能,以及您希望在主屏幕实现中使用的其他功能(例如启动器、壁纸等)。\ (2认同)