在android中实现一个定时任务,(翻译)Android中的定时任务

Tags: android

原文:https://guides.codepath.com/android/Repeating-Periodic-Tasks

在应用程序中使用”定时任务”是一种常见的需求,例如”定时从网络上获取新数据”,”运行一些动画”或者”定时更新UI”.通常有以下几种实现方法:

Handler: 在UI线程上定制运行一个Runnable对象;

ScheduledThreadPoolExecutor: 使用后台线程池执行任务

AlarmManager: 让service在后台执行定时任务

TimerTask: 不可靠,在非UI线程上运行.不建议使用(原因见: http://www.mopri.de/2010/timertask-bad-do-it-the-android-way-use-a-handler/)

以下一一介绍下1,2和3三种方法.

Handler

需要创建Handler对象,然后向消息队列里发送消息.

代码如下:

// 创建Handler对象

Handler handler = new Handler();

// 定义要执行的runnable对象

private Runnable runnableCode = new Runnable() {

@Override

public void run() {

// 做一些事情

Log.e("Handlers", "Called");

// 2秒后再次执行

handler.postDelayed(runnableCode, 2000);

}

};

// 立即开始第一次执行

handler.post(runnableCode);

删除正在执行的任务:

handler.removeCallbacks(runnableCode);

注意使用Handler是在UI线程上执行Runnable对象的.

ScheduledThreadPoolExecutor

例子代码:

class MyTask implements Runnable {

@Override

public void run() {

System.out.println("Hello world");

}

}

ScheduledThreadPoolExecutor exec =

new ScheduledThreadPoolExecutor(1);

// 方式一

long period = 100;

exec.scheduleAtFixedRate(

new MyTask(), 0, period, TimeUnit.MICROSECONDS);

//方式二

long delay = 100;

exec.scheduleWithFixedDelay(

new MyTask(),0, delay, TimeUnit.MICROSECONDS);

了解更多: https://codelatte.wordpress.com/2013/11/13/49/

AlarmManager

即使应用处于后台,使用这种方法也可起效.

详见: https://guides.codepath.com/android/Starting-Background-Services#using-with-alarmmanager-for-periodic-tasks

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值