上面一篇博文采用了Timer和TimerTask的方法来实现倒计时的功能,但是由于改变UI必须在主线程中进行改变,所以使用了runOnUiThread方法来实现。其实,除了这个方法之外,最常用的还是使用Handler来实现。
在android中提供了一种异步回调机制Handler,利用它可以在完成任务后做出相应的通知。
这里使用Handler来实现倒计时的功能,具体代码如下:
package com.example.timertimertaskhandlerdemo;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
private int secondLeft = 10;
private TextView textView;
Timer timer = new Timer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.texttime);
}
public void begin(View view) {
timer.schedule(task, 1000, 1000);
}
TimerTask task = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
secondLeft--;
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
textView.setText("" + secondLeft);
if (secondLeft < 0) {
timer.cancel();
textView.setText("倒计时结束");
}
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}