Android开发者-报警管理器与服务
我正在制作一个需要每小时执行一个功能的应用程序,即使该应用程序已关闭 首先,我想创建一个服务,但在我的测试中,我意识到android有时会杀死我的服务。所以我在寻找另一个解决方案,我找到了AlarmManager。我已经实现了它,它似乎可以工作,但我怀疑它是否会发生同样的服务或它将永远运行?(直到手机重新启动…) 另一个问题是,需要创建一个新线程来在alarm manager中执行该进程,还是直接在其他线程中运行 我已经实现了它,它似乎可以工作,但我怀疑它是否会发生同样的服务或它将永远运行?(直到手机重新启动…) 它将运行到:Android开发者-报警管理器与服务,android,alarmmanager,Android,Alarmmanager,我正在制作一个需要每小时执行一个功能的应用程序,即使该应用程序已关闭 首先,我想创建一个服务,但在我的测试中,我意识到android有时会杀死我的服务。所以我在寻找另一个解决方案,我找到了AlarmManager。我已经实现了它,它似乎可以工作,但我怀疑它是否会发生同样的服务或它将永远运行?(直到手机重新启动…) 另一个问题是,需要创建一个新线程来在alarm manager中执行该进程,还是直接在其他线程中运行 我已经实现了它,它似乎可以工作,但我怀疑它是否会发生同样的服务或它将永远运行?(直
- 如您所述,设备已重新启动,或者
- 用户卸载您的应用程序,或
- 您自己取消活动,或者
- 用户进入“设置”,在已安装应用的列表中找到您的应用,点击该条目,然后单击“强制停止”按钮
\u WAKEUP
-类型的报警,请使用getService()
pendingent
每小时向IntentService
发送一次控制\u WAKEUP
类型的警报,则需要使用getBroadcast()
pendingent
,并让它调用的子类,或者您需要自己管理WakeLock
,以便在您执行工作时保持设备处于唤醒状态不,Android不会终止定时报警,除非更换应用程序或重新启动设备,否则它们会按计划执行。使用这些事件的广播接收器重新安排警报。无法阻止强制停止,因为它会完全杀死所有应用程序组件和线程 这取决于Alarm Manager的功能。如果发送广播,则接收器限制为10秒 如果它启动活动、服务或意图服务,则没有限制。对于活动和服务,您必须完成或停止它;对于意图服务,您必须完成或停止它,直到流程完成。请注意,在Intent服务中不能有其他线程,并且只能在OnHandleIntent中编写代码
也必须考虑设备状态。如果是睡眠,并且您正在使用唤醒标志接收器,则不需要唤醒锁,但其他接收器需要。设备很快就会恢复睡眠
不要将系统资源浪费在服务上,因为Alarm Manager会执行您想要的操作。此外,如果您希望它在设备重新启动时不会停止,您可以使用
BOOT_COMPLETED
的intent过滤器在manifest
中注册它,以便在设备启动后再次启动rebooted@CommonsWare在升级的情况下,闹钟应用程序不会因为不能自动重新启用而无用吗?我的意思是,你写到升级后,alarmManager会取消与应用程序相关的一切,对吗?关于在后台运行的解决方案,您是否有每个解决方案的示例代码?@androiddeveloper:“在升级的情况下,闹钟应用程序不会因为无法自动重新启用而无用吗?”——如果有必要,请收听操作\u包\u更改的。“你写的升级后,alarmManager会取消与应用程序相关的所有内容,对吗?”--不,这不是我写的。我写道:“在你的应用程序升级后,可能需要再次安排警报(我忘了…)。(重点补充)“关于在后台运行的解决方案,你有没有每个解决方案的示例代码?”--我不知道你在说什么。@Commonware ACTION\u PACKAGE\u CHANGED是禁用启用的,没有?我想你指的是被替换的行动包。问题是,当前应用程序是否会在升级后立即收到通知。无论如何,对不起,我误解了你的意思。关于另一件事,我是说关于你答案的最后一部分。您有两个项目,每个项目都涉及不同的解决方案。我问你是否知道每一个的示例。@androiddeveloper:实际上,我认为正确的示例是操作\u我的\u包\u替换的
,这是API级别12的新示例,进一步表明应用程序的警报在升级时是单独存在的。“我问你是否知道每一个的样品”--和