我正在制作一个需要每小时执行函数的应用程序,即使应用程序关闭也是如此。
首先,我考虑创建一个服务,但在我的测试中,我意识到Android有时会杀死我的服务。因此,我正在寻找另一种解决方案,并找到了AlarmManager。我已经实施了它,似乎可以工作,但我怀疑它是否会像服务那样发生同样的情况,或者它会一直运行直到手机重启为止?
另一个问题是,是否需要创建一个新线程在闹钟管理器中执行进程,还是直接在其他线程中运行?
我正在制作一个需要每小时执行函数的应用程序,即使应用程序关闭也是如此。
首先,我考虑创建一个服务,但在我的测试中,我意识到Android有时会杀死我的服务。因此,我正在寻找另一种解决方案,并找到了AlarmManager。我已经实施了它,似乎可以工作,但我怀疑它是否会像服务那样发生同样的情况,或者它会一直运行直到手机重启为止?
另一个问题是,是否需要创建一个新线程在闹钟管理器中执行进程,还是直接在其他线程中运行?
如果您没有使用 _WAKEUP
类型的闹钟,请使用一个 getService()
PendingIntent
每小时发送控制到一个 IntentService
如果您正在使用 _WAKEUP
类型的闹钟,您需要使用一个 getBroadcast()
PendingIntent
,并且要么调用您的 WakefulIntentService
子类,要么自己管理一个 WakeLock
以保持设备处于唤醒状态,同时完成工作
manifest
中注册一个intent-filter
为BOOT_COMPLETED
,这样它就会在设备重启后重新启动。 - codeMagicACTION_PACKAGE_CHANGED
,如果必要的话。 “你写道,在升级后,alarmManager会取消与该应用程序相关的所有内容,对吗?”--不,我没有写那个。我写道:“可能需要在您的应用程序升级后再次安排闹钟(我忘记了...)。”(添加强调)“关于在后台运行的解决方案,你有每个解决方案的示例代码吗?”--我不知道你在说什么。 - CommonsWareACTION_MY_PACKAGE_REPLACED
,这是API Level 12中新增的,进一步表明应用程序的闹钟在升级时不会受到影响。“我问你是否知道它们的示例”--https://github.com/commonsguy/cw-omnibus/tree/master/AlarmManager/Scheduled和https://github.com/commonsguy/cw-omnibus/tree/master/AlarmManager/Wakeful - CommonsWare