google推荐方式3种:
一、AlarmManager
setRepeating() 重复闹钟。1、Android 4.4(API 级别 19)开始,所有重复闹钟都是不精确的,延时2分钟左右。2、闹钟触发的待定 Intent。当您设置使用同一待定 Intent 的第二个闹钟时,它会替换原始闹钟。3、当设备在低电耗模式下处于空闲状态时,不会触发闹钟。所有已设置的闹钟都会推迟,直到设备退出低电耗模式。
setInexactRepeating() 重复闹钟,同setRepeating()。特点:Android 会同步来自多个应用的重复闹钟,并同时触发它们。这可以减少系统必须唤醒设备的总次数,从而减少耗电量。
setAndAllowWhileIdle()
或 setExactAndAllowWhileIdle()
即使设备处于空闲状态您的工作也会完成
注意事项:
1、如需取消 PendingIntent
,请将 FLAG_NO_CREATE 传递到 PendingIntent.getService(),以获取该 Intent 的实例(如果存在),然后将该 Intent 传递到 AlarmManager.cancel()
2、默认情况下,当设备关机时,所有闹钟都会被取消。为了防止出现这种情况,您可以将应用设计为在用户重启设备时自动重新启动重复闹钟。
配置清单
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <receiver android:name=".SampleBootReceiver" android:enabled="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"></action> </intent-filter> </receiver>
3、在 Android 6.0(API 级别 23)中引入了低电耗模式和应用待机模式。低电耗模式下使用 setAndAllowWhileIdle() 或 setExactAndAllowWhileIdle() 让某个闹钟在低电耗模式下也能触发。
应用将在处于空闲状态时(即用户在一段时间内未使用应用,并且应用没有前台进程时)进入应用待机模式。当应用处于应用待机模式时,闹钟会像设备处于低电耗模式一样被延迟。当应用不再处于空闲状态或者当设备接通电源时,该限制便会解除。
二、使用FCM(Firebase Cloud Messaging)
使用跨平台定点消息推送实现消息提醒,向单台设备发送消息
官方文档:https://firebase.google.com/docs/cloud-messaging/?hl=zh-cn
凡是不直接与用户互动相关且日后可随时运行的任务,都可以延期执行。异步任务即使在应用退出或设备重启后仍能正常运行