Java.util.Timer 与 android.widget.Chronometer 在功能上有些类似,但Timer 比Chronometer 更强大,Timer 除了可以指定循环执行的时间间隔外,还可以重复执行和不重复执行,Chronometer 类一般用来计时
Timer 定时执行功能是在TimeTask类中实现, Time 实际上是在线程中执行run方法, 与 Handler 相比,Handler 是将执行的动作放到Android系统的消息队列中.因此,使用Timer 执行run()时,在run()方法内不能直接更新GUI组件
在这里介绍一下发送消息的过程:
首先定义一个定时类Timer,通过schedule方法启动定时器------>根据schedule 参数timerTask,创建TimerTask类,在其中run()中,定义一个Message类,初始化message.what =1, sendMessage()发送消息传到线程中
---------------> 在Handler 类通过handleMessage()方法,判断msg.what条件作出更新UI组件等处理,整个过程结束
主要代码:
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() + 10;
if (currentProgress > progressBar.getMax())
currentProgress = 0;
progressBar.setProgress(currentProgress);
break;
}
super.handleMessage(msg);
}
};
private TimerTask timerTask = new TimerTask() {
public void run() {
// 使用sendMesage 方法发送一条消息
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定时器,并在每0.2s 更新一次进度
timer.schedule(timerTask, 0, 200);
}
}
示意图
具体代码请参见 ch08_timer工程