1 package com.example.gp08_day26_handler3;
 2 
 3 import android.os.Bundle;
 4 import android.os.Handler;
 5 import android.os.Looper;
 6 import android.os.Message;
 7 import android.app.Activity;
 8 import android.view.Menu;
 9 import android.view.View;
10 
11 /**
12  * 主线程给子线程发消息
13  * @author qq
14  *
15  */
16 public class MainActivity extends Activity {
17 
18     private Handler handler;//需要在子线程中实例化
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_main);
23     }
24 
25     public void sendMessage(View v)
26     {
27         //点击按钮给子线程发消息
28         Message msg = Message.obtain();
29         msg.obj ="hello,你好!";
30         //把Message对象放入handler内部的MessageQueue对象,而handler内部的MessageQueue引用指向的是 Looper中的MessageQueue
31         handler.sendMessage(msg);
32     }
33     //创建子线程
34     class MyThread extends Thread
35     {
36         public void run()
37         {
38             //需要先有Looper对象
39             Looper.prepare();//会创建一个Looper对象,并把该对象放入到该线程的本地变量中,在Looper的构造方法中创建了MessageQueue对象
40             //在子线程中实例化handler,子线程中没有Looper对象 
41             
42             // mQueue = mLooper.mQueue; handler内部的MessageQueue引用指向的是 Looper中的MessageQueue对象
43             handler = new Handler();//如果直接实例化Handler,会异常 new RuntimeException,原因是子线程中没有Looper对象 
44             
45             //让Looper对象循环读取MessageQueue中的消息
46             //循环从队列中读取消息,当读到消息时,回去调用   msg.target.dispatchMessage(msg);
47             //在Message类中有一个target成员,当发送消息时,target成员被赋值为当前的 handler对象
48             Looper.loop();
49         }
50     }
51 
52 }
mainActivity

 

posted on 2015-09-19 22:27  毕哥  阅读(251)  评论(0编辑  收藏  举报