Android开发 定时任务清理数据
2022-01-21 14:25
4047 查看
原文地址:Android开发 定时任务清理数据 | Stars-One的杂货小窝
公司项目,需要整定时任务,对数据进行清理,需要在每天凌晨0:00进行数据的清理,使用了Alarm和广播的方式来实现
PS:基于此原理,也可以实现自动检测并更新apk的功能
实现
实现的原理为: 1.进入APP,启动闹钟,设置一个闹钟服务(在某个时间点会触发任务),任务中其实主要是发出一个广播
2.设置广播接收器里的逻辑,其中包含清理数据和重新设置闹钟服务(即上述第一步)
之后即可一直循环,可以保证稳定执行
闹钟
设置一个闹钟服务,指定第二天的凌晨0:00:00开始触发任务
//构造一个PendingIntent对象(用于发送广播) //注:ALARM_ACTION_CODE这个是action,后面需要匹配判断 String ALARM_ACTION_CODE = "ALARM_ACTION_CODE"; Intent intent = new Intent(ALARM_ACTION_CODE); //适配8.0以上(不然没法发出广播) if (DeviceUtils.getSDKVersionCode() > Build.VERSION_CODES.O) { intent.setComponent(new ComponentName(this, DataDeleteReceiver.class)); } PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 1, intent, PendingIntent.FLAG_CANCEL_CURRENT); //在第二天的0:00清理发出清理数据的广播 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.add(Calendar.DAY_OF_MONTH, 1); AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); KLog.d("闹钟已启动,预定触发时间:" + TimeUtils.date2String(calendar.getTime()));
广播接收逻辑
直接通过Android Studio的菜单直接新建一个广播
enabled和
exported都勾选即可
当时间到点后,系统会发送一个广播,我们程序需要去接收此问题
public class DataDeleteReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); //匹配下之前定义的action if ("ALARM_ACTION_CODE".equals(action)) { KLog.d("-----定时清理数据-----"); //删除数据(需要开个子线程去操作) //这里重新设置定时器 //方便起见,这里我是跳转回MainActivity去重新执行了 EventBus.getDefault().post(new AlarmEvent()); } } }
补充——定时任务的8种方式
Java SDK:
- while循环+sleep
- 递归+sleep
- Timer、TimerTask
- ScheduledExecutorService(带有定时任务的线程池)
Android SDK:
- Handler循环发消息
- Handler的postDelayed方法
- BroadcastReceiver循环自发广播
- AlarmManger+BroadcastReceiver定时发送广播
参考
相关文章推荐
- Android中后台定时任务实现,即时数据同步问题思考!
- 大数据Kettle数据清洗与定时任务开发
- android开发步步为营之61:android定时任务之Handler.postDelayed
- ssm框架开发定时任务到达某一个时间点自动更新数据
- Linux定时清理游戏log及mysql定时任务删除游戏日志数据
- Ubuntu上搭建android BSP的开发编译环境 && 设置定时编译任务
- Android开发中,定时执行任务的3种实现方法
- Android 定时执行任务 AlarmManager的使用(可用于闹钟开发)
- android开发——定时任务的制作(handler+Runnable)
- Android中后台定时任务实现,即时数据同步问题思考
- 在Android开发中,定时执行任务的3种实现方法:
- 在Android开发中,定时执行任务的3种实现方法:
- Android开发——获取应用数据/缓存大小并清理缓存
- Android开发——获取应用数据/缓存大小并清理缓存
- 在Android开发中,定时执行任务的3种实现方法
- Android开发之定时任务的创建
- Android开发之执行定时任务AlarmManager,Timer,Thread
- Ubuntu上搭建android BSP的开发编译环境 && 设置定时编译任务 && ubuntu从10.04升级到12.04后编译出错
- Android中后台定时任务实现,即时数据同步问题思考!
- android开发步步为营之59:android定时任务之ScheduledThreadPoolExecutor