在循环中handler.sendMessage(msg)后,利用Looper.loop()来调用handler.handleMessage(msg),如何让loop()退出执行下个迭代?
[code="java"]
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyView view = new MyView(this, null);
setContentView(view);
}
// 自定义视图类
class MyView extends View implements Runnable{
// 图形当前坐标
private int x=20, y=20;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
// 获得焦点
setFocusable(true);
// 启动线程
new Thread(this).start();
}
@Override
public void run() {
Looper.prepare();
Handler refreshHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what==0x101111){
MyView.this.update();
MyView.this.invalidate();
}
}
};
while(!Thread.currentThread().isInterrupted()){
// 通过发送消息更新界面
Message msg = refreshHandler.obtainMessage();
msg.what = 0x101111;
refreshHandler.sendMessage(msg);
Looper.loop();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 实例化画笔
Paint paint = new Paint();
// 设置画笔颜色
paint.setColor(Color.GREEN);
// 画圆
canvas.drawCircle(x, y, 10, paint);
}
// 更新坐标
private void update(){
int h = 500;
y += 5;
if(y>=h)
y = 20;
}
}
}
[/code]