Zhangjian He
← Blog

Android中实现定时任务【翻译】

原文:http://android-developers.blogspot.sg/2007/11/stitch-in-time.html

1.利用TimerTask实现任务的定时执行

TextView hezhangjian;
int count = 0;//用于计数
@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	hezhangjian = (TextView) findViewById(R.id.hezhangjian);
	Timer timer = new Timer();//新建一个Timer
	timer.schedule(new UpdateTimeTask(),100,200);
	//通过schedule方法执行一个TimerTask,Timertask是一个抽象类,必须重写它的run方法。
	//task,long a,long b代表的是先等待a毫秒的延迟执行任务,然后每次等待大约b时间执行任务。
}
class UpdateTimeTask extends TimerTask{

	@Override
	public void run() {
		count++;
		runOnUiThread(new Runnable() {
			@Override
			public void run() {
				hezhangjian.setText("这是"+"第"+count+"次");
			}
		});
	}
}

2.利用Handler实现定时任务的操作

TextView hezhangjian;
int count = 0;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  mHandler = new Handler();//初始化handler
  hezhangjian = (TextView) findViewById(R.id.hezhangjian);
  mHandler.postDelayed(new UpdateTimeTask(),200);//延迟200,执行这个任务
}
class UpdateTimeTask extends TimerTask{
  @Override
  public void run() {
  	count++;
  	runOnUiThread(new Runnable() {
  		@Override
  		public void run() {
  			hezhangjian.setText("这是"+"第"+count+"次");//执行完毕
  			mHandler.postDelayed(new UpdateTimeTask(),100);//延迟100,再执行这个任务
  		}
  	});
  }
}

如果你想要取消这个post事件,你可以使用handler的removeCallbacks(TimerTask task)方法。