ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android开发 定时任务清理数据

2022-01-21 14:31:15  阅读:163  来源: 互联网

标签:Calendar ALARM 清理 广播 闹钟 calendar Android 定时


原文地址: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的菜单直接新建一个广播

enabledexported都勾选即可

当时间到点后,系统会发送一个广播,我们程序需要去接收此问题

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定时发送广播

参考

标签:Calendar,ALARM,清理,广播,闹钟,calendar,Android,定时
来源: https://www.cnblogs.com/stars-one/p/15830108.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有