Handler与线程通信(二)

  回顾上一集内容:

    首先在UI Thread(Main Thread)创建一个Handler对象, 复写其HandlerMessage方法

    在Worker Thread里面调用Handler的SendMessage来发送消息

    消息会被发送到消息队列里面, Looper会从队列中取出并给主线程HandlerMessage处理

    这种机制实现从WorkerThread发送消息给MainThread

 

  这一集:

  

    这个过程与上一篇相反

    由MainThread里面的Handler发送消息, WorkerThread里面的HandlerMessage来处理

 

  总共分为3个步骤:

    1. 准备Looper对象

    2. 在WorkerThread当中生成Handler对象

    3. 在MainThread当中发送消息

 1 public static class PlaceholderFragment extends Fragment {
 2 
 3         private Button button;
 4         private Handler handler;
 5         
 6         public PlaceholderFragment() {
 7         }
 8 
 9         @Override
10         public View onCreateView(LayoutInflater inflater, ViewGroup container,
11                 Bundle savedInstanceState) {
12             View rootView = inflater.inflate(R.layout.fragment_main, container, false);
13  
14             button = (Button)rootView.findViewById(R.id.buttonId);
15             button.setOnClickListener(new OnClickListener() {  //匿名内部类写法!!!!!            
16                 public void onClick(View v) {
17                     Log.i("tag","onClick--->" + Thread.currentThread().getName());
18                     Message msg = handler.obtainMessage();
19                     handler.sendMessage(msg);
20                 }
21             });
22                    
23             WorkerThread wt = new WorkerThread();
24             wt.start();
25             
26             return rootView;
27         }
28         
29         class WorkerThread extends Thread{
30             //固定写法!!!!
31             @Override
32             public void run() {
33                 //准备Looper对象
34                 Looper.prepare();
35                 //在WorkerThread中生成一个Handler对象
36                 handler = new Handler(){
37                     public void handleMessage(Message msg) {
38                         Log.i("tag","handlerMessage--->" + Thread.currentThread().getName());
39                         Log.i("tag","Message Reiceved!!!");
40                     }
41                 };
42                 //调用Looper的loop方法之后,Looper方法将不断从消息队列中取出消息对象,然后调用Handler的HandlerMessage处理该消息对象
43                 //如果消息队列没有消息, 则线程阻塞
44                 Looper.loop();
45             }          
46         }
47     }

 

 

posted @ 2014-07-12 17:35  Mirrorhanman  阅读(182)  评论(0编辑  收藏  举报