AlarmManager 或 JobScheduler 与所有 Android 版本兼容?
AlarmManager or JobScheduler compatible with all Android versions?
我需要一些帮助来决定在我的应用中采用哪个 类 必须满足这些要求:
- 在准确的时间触发警报(精确到秒)
- 系统中可以有多个警报(在不同时间触发)。
- 应在设备处于睡眠状态时将其唤醒并使其保持唤醒状态,直到用户完成定义的任务。
- 应该 运行 在尽可能多的 Android 版本上,至少从 4.0 起(事实上你可以使用旧的 phone 到 运行 这个应用程序是一个加号)。
我用 AlarmManager 和 BroadcastReceiver 编写了一个小演示,以了解所有这些是如何工作的。我研究了 AlarmManager、BroadcastReceiver、WakefulBroadcastReceiver 和 JobScheduler 的文档,尽管我理解它们之间的差异,但我不知道哪个(哪些)能满足我的要求。
从文档中,我得到的印象是我可能需要编写多个版本的应用程序以适应它将 运行 使用的不同 Android 版本。这将是一场噩梦!
有什么关于 类 使用的建议吗?我不想只朝着一个给定的方向前进,后来发现我需要重写所有内容。
谢谢!
您不需要应用的多个版本,您只需要多个 "scheduler" 实现,每个实现只有几个文件,并且都调用相同的应用逻辑。
- 在准确的时间触发警报(精确到秒)
好吧,只有一个选项可以解决这个问题。你需要一个 AlarmManager.setExact。强烈建议不要这样做,因为它会浪费电池。
- 系统中可以有多个警报(在不同时间触发)。
那里的每个选项都会处理这个问题,只要您给它们不同的 ID。
- 应在设备处于睡眠状态时将其唤醒并保持唤醒状态,直到用户完成定义的任务。
听起来您需要拨打闹钟 Context.StartForegroundService,并离开该前台服务 运行ning 直到用户完成任务。同样,不鼓励这样做,因为它会浪费电池。
- 应该 运行 在尽可能多的 Android 版本上,至少从 4.0 开始(事实上你可以使用旧的 phone 到 运行 这个应用程序是一个加号)。
AlarmManager 和前台服务 运行 在 Android 的所有版本上,尽管启动前台服务的调用与 Android O 略有不同,但概念是相同的。
当你的应用正在做一些需要立即执行的重要事情时,即使屏幕关闭,你也应该抓住唤醒锁。唤醒锁可防止 CPU 暂停自身,以便您可以处理需要立即发生的事情。如果代码可以等到屏幕打开,那么请不要使用唤醒锁。 JobService 总是获取唤醒锁,因此 JobService 代码不需要获取单独的唤醒锁。如果您没有 运行ning 服务,包括 JobService,那么 Android 将随机停止您的应用程序,即使您有唤醒锁。所以你在做任何重要的工作时总是需要某种服务。
我需要一些帮助来决定在我的应用中采用哪个 类 必须满足这些要求:
- 在准确的时间触发警报(精确到秒)
- 系统中可以有多个警报(在不同时间触发)。
- 应在设备处于睡眠状态时将其唤醒并使其保持唤醒状态,直到用户完成定义的任务。
- 应该 运行 在尽可能多的 Android 版本上,至少从 4.0 起(事实上你可以使用旧的 phone 到 运行 这个应用程序是一个加号)。
我用 AlarmManager 和 BroadcastReceiver 编写了一个小演示,以了解所有这些是如何工作的。我研究了 AlarmManager、BroadcastReceiver、WakefulBroadcastReceiver 和 JobScheduler 的文档,尽管我理解它们之间的差异,但我不知道哪个(哪些)能满足我的要求。
从文档中,我得到的印象是我可能需要编写多个版本的应用程序以适应它将 运行 使用的不同 Android 版本。这将是一场噩梦!
有什么关于 类 使用的建议吗?我不想只朝着一个给定的方向前进,后来发现我需要重写所有内容。
谢谢!
您不需要应用的多个版本,您只需要多个 "scheduler" 实现,每个实现只有几个文件,并且都调用相同的应用逻辑。
- 在准确的时间触发警报(精确到秒)
好吧,只有一个选项可以解决这个问题。你需要一个 AlarmManager.setExact。强烈建议不要这样做,因为它会浪费电池。
- 系统中可以有多个警报(在不同时间触发)。
那里的每个选项都会处理这个问题,只要您给它们不同的 ID。
- 应在设备处于睡眠状态时将其唤醒并保持唤醒状态,直到用户完成定义的任务。
听起来您需要拨打闹钟 Context.StartForegroundService,并离开该前台服务 运行ning 直到用户完成任务。同样,不鼓励这样做,因为它会浪费电池。
- 应该 运行 在尽可能多的 Android 版本上,至少从 4.0 开始(事实上你可以使用旧的 phone 到 运行 这个应用程序是一个加号)。
AlarmManager 和前台服务 运行 在 Android 的所有版本上,尽管启动前台服务的调用与 Android O 略有不同,但概念是相同的。
当你的应用正在做一些需要立即执行的重要事情时,即使屏幕关闭,你也应该抓住唤醒锁。唤醒锁可防止 CPU 暂停自身,以便您可以处理需要立即发生的事情。如果代码可以等到屏幕打开,那么请不要使用唤醒锁。 JobService 总是获取唤醒锁,因此 JobService 代码不需要获取单独的唤醒锁。如果您没有 运行ning 服务,包括 JobService,那么 Android 将随机停止您的应用程序,即使您有唤醒锁。所以你在做任何重要的工作时总是需要某种服务。