下面的代码是一个线程和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
}
}
}
本文介绍了一种利用线程和Handler实现周期性更新UI的方法。通过创建并启动一个线程,该线程每10毫秒发送一条消息给Handler,Handler接收到消息后更新ImageView中的图片旋转角度,实现平滑的动画效果。START_BUTTON_CLICKED变量用于控制线程是否继续发送消息。
4万+

被折叠的 条评论
为什么被折叠?



