3、定时器:Timer
Timer和Chronometer类似,但功能更加强大。Timer类通过schedule方法设置执行方式和时间,schedule方法的第一个参数为TimerTask,TimerTask类实现了Runnable接口,因此Timer实际上是在线程中执行run方法。
虽然Timer和Handler的处理代码都放在run方法中,但Timer是在线程中执行run方法,Handler是将执行的动作添加到Android系统的消息队列。因此使用Timer执行run方法时,在run方法中不能直接更新UI,必须使用Handler。
public class Main extends Activity { private ProgressBar progressBar; private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 1: int currentProgress = progressBar.getProgress() + 2; if (currentProgress > progressBar.getMax()) currentProgress = 0; progressBar.setProgress(currentProgress); break; } super.handleMessage(msg); } }; private TimerTask timerTask = new TimerTask() { public void run() { Message message = new Message(); message.what = 1; handler.sendMessage(message); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); progressBar = (ProgressBar) findViewById(R.id.progressbar); Timer timer = new Timer(); timer.schedule(timerTask, 0, 500); } }在run方法中并没有直接更新进度条组件,而是使用Handler类的sendMessage方法发送一条消息,并在handlemessage方法中更新进度条。实际上,这个handler对象已经加到Android消息队列,等待调用。使用Timer timer = new Timer();
timer.schedule(timerTask, 0, 500);就可以启动定时器。