300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > AlarmManager 定时任务详解

AlarmManager 定时任务详解

时间:2024-03-17 10:48:57

相关推荐

AlarmManager 定时任务详解

AlarmManager的使用

使用场景

应用保活设置闹铃发送心跳包

功能说明:设置一个在未来的某个时间运行应用的PendingIntent 或者OnAlarmListener ,即使设备已经进入睡眠已设置的闹铃也会被保持,只有当设备关闭或是重启的时候会被清除

AlarmManager 对象获取

//AlarmManager 系统服务的获取方式AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

AlarmManager 提供的api介绍

1. 统一参数说明

AlarmType类型:

时间参照物,是否在休眠时候唤起

定时任务触发类型

PendingIntent ,OnAlarmListener

2. 功能方法

设置定时任务相关方法取消定时任务相关方法其他方法(设置系统时间、时区,获取下一次定时任务的信息)

tips:

setTimeZone(String timeZone)的参数timeZone,在sdk>=Build.VERSION_CODES.M(23),TimeZone#getAvailableIDs()中字符串会抛出IllegalArgumentException

android不同版本对AlarmManager的影响

程序杀死后定时任务不执行

定时任务不执行的原因是程序进程停止运行了

通过在启动的广播manifest.xml中添加android:process=":myReceiver"android8.0不能有静态广播,那就添加一个前台服务,在启动定时器任务前打开前台服务,前台服务最近历史列表中杀不死,除非在设置里面杀死

AlarmManager与Timer的区别

AlarmManagerCompat版本兼容处理

implementation "com.android.support:support-compat:28.0.0"//或者implementation "androidx.core:core:1.3.0"

AlarmManagerCompat 代码:

public final class AlarmManagerCompat {public static void setAlarmClock(@NonNull AlarmManager alarmManager, long triggerTime, @NonNull PendingIntent showIntent, @NonNull PendingIntent operation) {if (VERSION.SDK_INT >= 21) {alarmManager.setAlarmClock(new AlarmClockInfo(triggerTime, showIntent), operation);} else {setExact(alarmManager, 0, triggerTime, operation);}}public static void setAndAllowWhileIdle(@NonNull AlarmManager alarmManager, int type, long triggerAtMillis, @NonNull PendingIntent operation) {if (VERSION.SDK_INT >= 23) {alarmManager.setAndAllowWhileIdle(type, triggerAtMillis, operation);} else {alarmManager.set(type, triggerAtMillis, operation);}}public static void setExact(@NonNull AlarmManager alarmManager, int type, long triggerAtMillis, @NonNull PendingIntent operation) {if (VERSION.SDK_INT >= 19) {alarmManager.setExact(type, triggerAtMillis, operation);} else {alarmManager.set(type, triggerAtMillis, operation);}}public static void setExactAndAllowWhileIdle(@NonNull AlarmManager alarmManager, int type, long triggerAtMillis, @NonNull PendingIntent operation) {if (VERSION.SDK_INT >= 23) {alarmManager.setExactAndAllowWhileIdle(type, triggerAtMillis, operation);} else {setExact(alarmManager, type, triggerAtMillis, operation);}}private AlarmManagerCompat() {}}

tips:

不多说AlarmManagerCompat 做了一些简单的版本兼容性处理

AlarmManager使用实例

精准单次的定时任务精准循环的定时任务

AlarmManager,JobScheduler,WorkManager的功能

此文要是对你有帮助,如果方便麻烦点个赞,谢谢!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。