自定义与线程相关的Handler:
下面我们来自定义一些与线程相关的handler,以巩固以上所学,就像上篇文章提到的那样,我们先用handler的sendMessage方法去发送消息,发送到looper以后,looper再将消息回传给handler,再使用handler的handleMessage去处理消息,在主线程中,这些过程都自动创建,我们无须干预,但是在子线程中,这些过程不会自动创建,我们需要手动创建,我们先发送消息,然后需要looper.prepare()准备好looper,在handler处理消息以后,使用looper.loop()去轮询,下面上验证通过的代码:
SecondActivity.java:
package com.example.handler;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.widget.TextView;
public class SecondActivity extends Activity {
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
System.out.println("UI---------->"+Thread.currentThread());
};
};
class MyThread extends Thread{
public Handler handler;
@Override
public void run() {
Looper.prepare();
handler =new Handler(){
@Override
public void handleMessage(Message msg) {
System.out.println("currentThread:"+Thread.currentThread());
}
};
Looper.loop();
}
}
private MyThread thread;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText("hello handler");
setContentView(tv);
thread = new MyThread();
thread.start();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
thread.handler.sendEmptyMessage(1);
handler.sendEmptyMessage(1);
}
}