美文网首页
Android实现定时任务

Android实现定时任务

作者: 12313凯皇 | 来源:发表于2020-07-16 19:39 被阅读0次

碰到一个简单的需求:执行一个耗时任务,超过预设的最长时间后则取消这次任务,即在任务开始时设置一个定时器,超过指定时间后取消这次任务。前前后后换了三种方式:HandlerTimer以及AlarmManager,在这里小结一下它们的用法与区别。

Handler

首先Handler应该是最熟悉的也最常用的一种方式了,核心就是调用handler.postDelayedhandler.sendMessageDelayed()或者handler.sendEmptyMessageDelayed()方法设置一个延迟时间,然后将消息发送到消息队列中。示例代码如下:

private static final long TIMEOUT_MILLS = 5 * 60 * 1000L;

public void scheduleTimeout(){
    Handler handler = new Handler();
    handler.postDelayed(() -> {
        //timeout logic
        ...
    }, TIMEOUT_MILLS);
}

public void cancel(){
    handler.removeCallbacksAndMessages(null);
}

Timer

TimerJava提供的一个计时器,其内部单独开启了一个线程来执行任务,且有一点需要注意就是Timer调用了cancel方法后,就无法再次添加task了

private static final long TIMEOUT_MILLS = 5 * 60 * 1000L;

Timer timer = new Timer();

private TimerTask timeoutTask = new TimerTask() {
    @Override
    public void run() {
        //timeout logic
        
    }
};

public void scheduleTimeout(){
    timer.schedule(timeoutTask,TIMEOUT_MILLS);
}

public void cancel(){
    //timer cancel后不能再次调用schedule方法,需要重新创建,所以可以调用task.cancel方法取消任务
    //timer.cancel(); 
    timeoutTask.cancel();
}

AlarmManager

AlarmManagerAndroid提供的一个类,它可以实现在应用生命周期之外定时任务。我这里所使用的场景比较简单,就是上传超时的处理,超时的时候屏幕可以能已经熄灭了,如果使用Handler或者Timer可能超时任务不会被执行,而使用AlarmManager超时后它会唤醒进程然后执行超时逻辑。使用示例如下:

private static final long TIMEOUT_MILLS = 5 * 60 * 1000L;

AlarmManager mAlarmManager = (AlarmManager) contenxt.getSystemService(Context.ALARM_SERVICE);

private PendingIntent sTimeoutPendingIntent;

public void scheduleTimeout(Context context){
    Intent intent = new Intent("com.action.xxx");
    intent.setClass(this, TimeoutService.class);
    sTimeoutPendingIntent = PendingIntent.getService(context, 0, intent, 0);
    mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime() + TIMEOUT_MILLS, sTimeoutPendingIntent);
}

public void cancel(){
    if (sTimeoutPendingIntent != null) {
        mAlarmManager.cancel(sTimeoutPendingIntent);
    }
}

AlarmManager的主体内容还是蛮多的,这里只涉及到了一小部分,贴一下链接方便以后查看:设置重复闹铃时间

相关文章

  • 后台执行的定时任务

    另可参考:Android 定时任务的多种实现方式 Android 中的定时任务一般有两种实现方式,一种是使用 Ja...

  • Android 实现定时任务

    在Android上做定时任务的时候,很多人第一个想到的是JavaAPI里面的Timer类, 熟悉 常用 当然首选....

  • Android实现定时任务

    碰到一个简单的需求:执行一个耗时任务,超过预设的最长时间后则取消这次任务,即在任务开始时设置一个定时器,超过指定时...

  • PollingTask,一个简单的心跳轮询库

    做定时任务对于android可以有好多种实现方式: 1. AlarmManager 利用系统的"闹钟"功能来做定时...

  • day 22 操作系统定时任务

    系统定时任务概念==生活中闹钟 系统定时任务实现方法: 实现定时任务配置: 定时任务如何进行设置 定时任务编写常见...

  • 2019-10-14 定时任务方案

    定时任务方案 定时任务实现

  • springboot内置TaskScheduler实现动态定时任

    我之前用过 quartz实现动态定时任务,但是这次使用 springboot 内置的定时任务来实现动态定时任务,如...

  • 2019-07-31定时任务

    定时任务 定时任务实现方法 系统默认定时任务 用户自定义设置定时任务 定时任务配置文件 定时任务启动 定时任务样例...

  • 定时任务

    Android中执行定时任务也是很常见的需求,今天我们就来实现一个最简单的定时任务:从1到10每隔1秒进行数数,实...

  • Python 定时任务

    定时任务的实现 https://lz5z.com/Python定时任务的实现方式

网友评论

      本文标题:Android实现定时任务

      本文链接:https://www.haomeiwen.com/subject/weiphktx.html