首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与所有安卓版本兼容的AlarmManager或JobScheduler?

与所有安卓版本兼容的AlarmManager或JobScheduler?
EN

Stack Overflow用户
提问于 2018-05-31 05:53:51
回答 1查看 735关注 0票数 0

我需要一些帮助来决定在我的应用程序中采用哪些类来满足这些要求:

  • 在准确的时间(精确到秒)触发警报
  • 可以在系统中有多个警报(在不同的时间触发)。
  • 应在设备处于睡眠状态时唤醒设备,并使其保持清醒,直到用户完成定义的任务。
  • 应在尽可能多的安卓版本上运行,至少4.0及更高版本(您可以使用旧手机运行此应用程序的事实是更好的)。

我已经用AlarmManager & BroadcastReceiver编写了一个小演示,以了解这一切是如何工作的。我研究了AlarmManager、BroadcastReceiver、WakefulBroadcastReceiver和JobScheduler的文档,尽管我了解它们之间的区别,但我不知道哪一个(哪些)能满足我的需求。

从文档中,我得到的印象是,我可能需要编写我的应用程序的多个版本,以适应它将在其上运行的不同Android版本。这将是一场噩梦!

对使用哪些类有什么建议吗?我讨厌在一个给定的方向上走下去,结果却发现我需要重写所有的东西。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-02 04:55:12

你不需要你的应用程序的多个版本,你只需要多个“调度器”实现,每个实现只有几个文件,并且都调用相同的应用程序逻辑。

  • 在准确的时间(精确到秒)触发警报

好吧,只有一个选择可以解决这个问题。你需要一个AlarmManager.setExact。强烈反对这样做,因为它往往会浪费电池。

  • 可以在系统中有多个警报(在不同的时间触发)。

只要你给他们不同的ids,那里的每一个选项都会处理这个问题。

  • 应在设备处于睡眠状态时唤醒设备,并使其保持清醒,直到用户完成定义的任务。

听起来您需要让闹钟调用Context.StartForegroundService,并让前台服务一直运行,直到用户完成任务。再一次,这是不鼓励的,因为它浪费电池。

  • 应该在尽可能多的安卓版本上运行,至少从4.0开始(你可以使用旧手机来运行这个应用程序的事实是一个加号)。

AlarmManager和前台服务在所有版本的安卓上都可以运行,尽管启动前台服务的调用与安卓O略有不同,但概念是相同的。

当你的应用程序正在做一些重要的事情,需要立即执行时,即使屏幕关闭,你也应该获取一个唤醒锁。唤醒锁可以防止CPU自身暂停,这样您就可以处理需要立即发生的事情。如果代码可以等到屏幕打开,请不要使用唤醒锁。JobService总是获取唤醒锁,因此JobService代码不需要获取单独的唤醒锁。如果你没有运行任何服务,包括JobService,那么Android会随机停止你的应用,即使你有一个唤醒锁。因此,在做任何重要工作时,您总是需要某种类型的服务。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50613857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档