Android的使用AlarmManager简单实现定时任务

news/2025/1/15 16:16:10/文章来源:https://www.cnblogs.com/xielong/p/18673279

使用AlarmManager简单实现定时每天或重复执行任务,有3种方式

1)AlarmManager+Service 实现方式

2)AlarmManager+InterService 实现方式

3)AlarmManger + BoardcastReceiver 实现方式

需要在AndroidMainifast.xml 增加权限

1)增加ALARM(闹钟)权限

    <uses-permission android:name="android.permission.SET_ALARM"/><uses-permission android:name="android.permission.WAKE_LOCK"/><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2)增加Service和BoardcastReceiver注册

  <service android:name=".service.AlarmService" /><service android:name=".service.AlarmIntentService"/><receiver android:name=".broadcast.AlarmBroadcastReceiver" />

3)Service和BoardcastReceiver定义

 3.1)AlarmService

public class AlarmService extends Service {private final String TAG = "AlarmService";@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// 在这里执行你的任务Log.e(TAG,"调用闹钟,调用时间:"+ DateHelper.timestampToDate(System.currentTimeMillis()) );// 任务执行完毕后,停止Service
        stopSelf();return START_NOT_STICKY;}@Overridepublic IBinder onBind(Intent intent) {return null;}
}

3.2)AlarmIntentService

public class AlarmIntentService extends IntentService
{private final String TAG = "AlarmIntentService";public AlarmIntentService(){super("AlarmIntentService");}@Overrideprotected void onHandleIntent(Intent intent){Log.e(TAG,"调用闹钟,调用时间:"+ DateHelper.timestampToDate(System.currentTimeMillis()) );}
}

3.3)AlarmBoardcastReceiver

public class AlarmBroadcastReceiver extends BroadcastReceiver
{private final String TAG = "AlarmBroadcastReceiver";public static String alarmboradcastAction = "alarm.broadcast.upload";@Overridepublic void onReceive(Context context, Intent intent){if(intent.getAction().equals(alarmboradcastAction)){Log.e(TAG,"调用闹钟,调用时间:"+ DateHelper.timestampToDate(System.currentTimeMillis()));}}
}

4)AlarmManager结合Service、IntentService、boardcastReceiver使用

4.1)AlarmManager+Service 使用

  /*** AlarmManager + Service 实现定时任务* */public void AlarmServiceTest(){// 设置定时任务的代码片段Intent alarmIntent = new Intent(this, AlarmService.class);PendingIntent pendingIntent = PendingIntent.getService(this, 0, alarmIntent, 0);AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);// 设置单次闹钟或重复闹钟// 设置为单次闹钟long triggerAtMillis = System.currentTimeMillis() + 1000; // 10秒后触发alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);// 或者设置重复闹钟(最小时间间隔:1 min)//long intervalMillis = 1000 * 60*1; // 每隔60秒触发一次//alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), intervalMillis, pendingIntent);}

4.2)AlarmManager+IntentService 使用

 /*** AlarmManager + IntentService 实现定时任务* */public void AlarmInterServiceTest(){// 设置定时任务的代码片段Intent alarmIntent = new Intent(this, AlarmIntentService.class);PendingIntent pendingIntent = PendingIntent.getService(this, 0, alarmIntent, 0);AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);// 设置单次闹钟或重复闹钟// 设置为单次闹钟//long triggerAtMillis = System.currentTimeMillis() + 1000; // 10秒后触发//alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);// 或者设置重复闹钟(最小时间间隔:1 min)long intervalMillis = 1000 * 60*1; // 每隔60秒触发一次
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), intervalMillis, pendingIntent);}

4.3)AlarmManager+BroadcastReceiver 使用

  /*** AlarmManager+BroadcastReceiver 方式实现定时任务* */public void AlarmBroadcastTest(){// 设置定时任务的代码片段Intent alarmIntent = new Intent(this, AlarmBroadcastReceiver.class);alarmIntent.setAction(AlarmBroadcastReceiver.alarmboradcastAction);PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);// 设置单次闹钟或重复闹钟// 设置为单次闹钟//long triggerAtMillis = System.currentTimeMillis() + 1000; // 10秒后触发//alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);// 或者设置重复闹钟long intervalMillis = 1000 * 60*1; // 每隔60秒触发一次1000 * 60
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), intervalMillis, pendingIntent);}

5)AlarmManager定时的调用

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);AlarmBroadcastTest();AlarmServiceTest();AlarmInterServiceTest();}

6)执行调用效果

E/AlarmBroadcastReceiver: 调用闹钟,调用时间:2025-01-15 15:48:37
E/AlarmService: 调用闹钟,调用时间:2025-01-15 15:48:37
E/AlarmIntentService: 调用闹钟,调用时间:2025-01-15 15:48:37
E/AlarmBroadcastReceiver: 调用闹钟,调用时间:2025-01-15 15:49:32
E/AlarmIntentService: 调用闹钟,调用时间:2025-01-15 15:49:32
E/AlarmBroadcastReceiver: 调用闹钟,调用时间:2025-01-15 15:50:32

参考网站:https://blog.51cto.com/u_16099281/12593446

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869669.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git工作流区域

一、主要区域工作目录作用:本地系统中的文件夹 文件状态未跟踪:文件刚添加到工作目录,还没有被Git管理(还没有git add) 已跟踪:Git已经对这个文件进行过管理,Git在本地仓库中有这个文件的历史记录。未修改:该文件没有再做任何修改。 已修改:修改过了,但是没有使用git a…

为什么说开展信创数据库势在必行

我国发展信创数据库的原因 - 保障信息安全:数据库存储着大量关键数据,如政府机密、金融交易记录、企业商业机密等。国外数据库可能存在安全漏洞或被植入后门,对国家信息安全构成威胁。发展信创数据库可实现自主可控,从根源上保障数据安全,降低安全风险。 - 减少技术依赖:…

20221320冯泰瑞《密码系统设计》第十二周

20221320冯泰瑞《密码系统设计》第十二周 学习内容Head First C 嗨翻C语言第12章 课程 mindmapAI 对学习内容的总结 要求让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可以使用微信读书或者云班课电子教材总结 《Head First C》第十二章的内容主要介绍了如何在C语言中…

20221320冯泰瑞《密码系统设计》第十一周

20221320冯泰瑞《密码系统设计》第十一周 学习内容Head First C 嗨翻C语言第11章 课程 mindmapAI 对学习内容的总结 要求让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可以使用微信读书或者云班课电子教材总结 《Head First C》第十一章的内容主要介绍了C语言中网络编…

深入理解第一范式(1NF):数据库设计中的基础与实践

title: 深入理解第一范式(1NF):数据库设计中的基础与实践 date: 2025/1/15 updated: 2025/1/15 author: cmdragon excerpt: 在关系型数据库设计中,规范化是确保数据一致性和减少冗余的重要步骤。第一范式(1NF)作为规范化的基础,要求每个表都应遵循数据的原子性及唯一性…

GaussDB技术解读——GaussDB架构介绍之集群管理层(CM)关键技术方案

GaussDB Kernel V5 集群管理层关键模块如下。图4 集群管理层组件设计图 CM 组件提供了四种服务 CM Agent, CM Server, OM Monitor, cm_ctl,与各类实例服务组件(CN, DN, GTM 等)一起构成了整个数据库集群系统。 cm_ctl 通过命令行执行集群的启动、停止、状态查询、主备倒换、…

GaussDB技术解读——GaussDB架构介绍之OM运维管理关键技术方案

​ GaussDB Kernel V5 OM运维管理关键模块如下。OM 运维主要功能有: 安装 升级 节点替换 扩容、缩容 自动告警 巡检 备份恢复、容灾 日志分析系统 在华为云的部署模式下,OM相关组件部署示意图如下: 图7 华为云OM运维管理 用户登录华为云Console,访问GaussDB Kernel V5的管控…

通义发布语音模型 MinMo:全双工、多口音;MiniCPM-o :端侧 GPT-4o 级视觉、语音、多模态实时流式大模型

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

部署 Browser-Use WebUI + DeepSeek 实现浏览器AI自动化

一、安装部署 1.安装 python3.11 或以上版本2.安装browser-use pip install browser-use3.安装 Playwright playwright install4.安装项目依赖 pip install langchain-google-genai==2.0.8 pip install pyperclip==1.9.0 pip install gradio==5.9.1 pip install langchain-olla…

Day_01

学习MarkDownMarkDown学习 标题: 二级标题 三级标题 字体 hello world hello world hello world hello world hello world 引用选择狂神说Java,走向人生巅峰分割线图片超链接 点击跳转到B站 列表A B CA B C表格名字 性别 生日张三 男 2000.1.4代码 public static

高效团队如何选择问题管理工具?六款推荐与理由

1. 板栗看板(Banli Kanban) 推荐理由: 板栗看板是由重庆赛迪信息公司研发的在线协同文档编辑与项目管理工具,专为中国企业的团队协作需求量身打造。核心功能:板栗看板集任务管理、实时协作编辑、进度追踪于一体,通过简洁直观的界面帮助团队掌握开发节奏。适用场景:适合中…

任务分配与信息共享:跨职能团队协作的利器

一、跨职能团队协作的挑战 沟通障碍与信息不对称 跨职能团队通常由来自不同部门的成员组成,各个部门之间存在语言、目标和工作方式上的差异。例如,研发团队更加注重技术细节和功能实现,而市场和销售团队则关注产品的市场定位、推广策略和客户需求。这种背景差异往往会导致沟…