1,Handdler的创建
**
- 注意点:在子线程中创建handler,需要先初始化Looper ,在子线程没有Looper的概念 ,Looper.prepare();//循环消息队列
其次创建Handler handler = new Handler();,最后 Looper.loop(); 就可以了。在主线程中就不需要初始化Looper,因为主线程中默认就做好了初始化的工作
**
2,Handler消息传递机制——子线程接收主线程发送的消息
private Button btn;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn= (Button) findViewById(R.id.button1);
new Thread(new MyThread()).start();
//主线程有一个默认的Looper
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Message message = Message.obtain();
message.obj = "albb";
mHandler.sendMessage(message);
}
});
}
public class MyThread implements Runnable{
@Override
public void run() {
//在子线程没有Looper的概念
Looper.prepare();//循环消息队列
//在子线程实例化handler
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
//子线程中接收主线程发送过来的消息
super.handleMessage(msg);
System.out.println("--接收主线程获取消息--" );
}
};
Looper.loop();
}
}
3,Handler消息传递机制——主线程接收子线程发送的消息
public class TempTestActivity extends Activity {
private TextView textView;
//在主线程中创建handler
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 3:
//此处接受到从子线程中发出的消息
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//创建一个新的线程发送handler的消息
handler.post(new Runnable() {
@Override
public void run() {
//在子线程中发送handler消息
handler.sendEmptyMessage(3);
}
});
}
});
}
}
4,Handler ,Message ,Looper , MessageQuen之间的关系
handler通过handler.sendEmptyMessage(3);等一些列的方法将message发送到消息队列messageQuen中,然后looper通过轮询将MessageQuen中的消息取出交给handler处理