Android 定时任务或间隔定时任务

sancaiodm Android 2021-12-12 1770 0

1方式:使用Handler方式

注意处理 手机灭屏以及CPU进入睡眠状态的处理,当手机进入前两者状态后,handler可能会停止工作,java的提供的TimerTask 也会有同样的问题。

handler = new Handler();
    runnable = new Runnable() {
        @Override
        public void run() {
            // 在handler内部使用延迟消息实现定时器
             handler.postDelayed(this,5000);//每隔5s执行
        }
    };
handler.postDelayed(runnable, 5000);//在外部首次启动handler延时任务,


2方式:使用AlarmManager 类来实现的(适合长时间的定时任务)

 AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

接下来调用 AlarmManager 的 set()方法就可以设置一个定时任务了,比如说想要设定一 个任务在 10 秒钟后执行,就可以写成:

 long mTime = SystemClock.elapsedRealtime() + 10 * 1000; 

 manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, mTime , pendingIntent); 

高版本的android可能在CPU进入休眠后,会造成定时任务执行不准时, 使用 AlarmManager 的 setExact()方法来替代 set()方法,就可以保证任务准时执行了。


3方式  使用CountDownTimer 执行间隔任务(适合已知任务的时间总长,或是一段时间内要间隔执行几次)

private class CountDown extends CountDownTimer {

    public CountDown() {
        //第一个参数表示任务的总时长
        //第二参参数表示总长时间分几次执行
        super(timeout,timeout);
    }

    @Override
    public void onFinish() {
        // TODO Auto-generated method stub
        //时间结束时会触发的方法
    }

    @Override
    public void onTick(long millisUntilFinished) {
        // TODO Auto-generated method stub
        //间隔执行触发的方法
    }
}

java 定时任务或间隔定时任务



评论