下面的代码是一个线程和handler,要创建一个线程可以这样写
Thread mThread = new Thread(new MyRunnable);
创建线程后必须启动线程才能激活线程:
mThread.start();
这样,一个线程已经激活,下面的代码中message是要传递的消息,系统每10毫秒给handler发送一个消息,让handler去做一件事,在这里是让一个ImageVIew中的图片旋转,START_BUTTON_CLICKED是一个boolean变量,当为假时,则相关的代码块不执行,在handler和Runnable中必须都要使用这个if语句,否则将产生误差,这个误差是由系统执行程序代码耗时产生的,所以必须对发送的message和handler进行同步
private Handler handler = new Handler() {
@Overridepublic void handleMessage(Message msg) {
if (msg.what == 1) {// 指针旋转
++angle;
if (START_BUTTON_CLICKED) {//当状态为假时,不再处理消息,与下面的handler.sendMessage同时停止,保持同步,避免误差
secondHand.setRotation(angle * 6f);
minuteHand.setRotation(angle / 10f);
}
}
};
public class MyRunnable implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
while (START_BUTTON_CLICKED) {
try {
Thread.sleep(10);
Message message = Message.obtain();
message.what = 1;
if (START_BUTTON_CLICKED) {//当状态为假时,则不发送消息
handler.sendMessage(message);
}
} catch (Exception e) {
// TODO: handle exception
}
}
}