Handler 是Android系统中处理定时操作的核心类。Handler 类主要通过以下三个方法来执行线程运行接口Runnable的时间:
(1) 立即执行Runnable 对象 public final boolean post(Runnable r);
(2) 在指定的时间 (uptimeMillis) 执行Runnable 对象 public final boolean postAtTime(Runnable r, long uptimeMillis), 第2个参数表示一个精确时间的毫秒数,如果从当前时间算起,需要使用android.os.SystemClock.uptimeMillis()获得基准时间;
(3) 在指定的时间间隔(delayMillis) 执行Runnable 对象 public final boolean postDelayed(Runnable r, long delayMillis);
主要代码:
public class Main extends Activity implements OnClickListener, Runnable {
private Handler handler;
private TextView tvCount;
private int count = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btnStart = (Button) findViewById(R.id.btnStart);
Button btnStop = (Button) findViewById(R.id.btnStop);
Button btnShowToast = (Button) findViewById(R.id.btnShowToast);
tvCount = (TextView) findViewById(R.id.tvCount);
btnStart.setOnClickListener(this);
btnStop.setOnClickListener(this);
btnShowToast.setOnClickListener(this);
handler = new Handler();
}
class RunToast implements Runnable {
private Context context;
public RunToast(Context context) { this.context = context; }
@Override
public void run() {
Toast.makeText(context, "3秒后显示Toast提示信息", Toast.LENGTH_LONG).show();
}
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btnStart:
handler.postDelayed(this, 1000);
break;
case R.id.btnStop:
handler.removeCallbacks(this);
break;
case R.id.btnShowToast:
handler.postAtTime(new RunToast(this) { }, SystemClock.uptimeMillis() + 3000);
break;
}
}
@Override
public void run() {
tvCount.setText("Count:" + String.valueOf(++count));
handler.postDelayed(this, 1000);
}
}
示意图
具体代码请参见
ch08_handler 工程