Handler基本运行机制

Handler,Looper,MessageQueue的基本原理(三个组成一个消息处理机制)最大的作用就是实现线程间的通信

Handler负责把消息对象加入到消息队列当中

Looper(循环器)是一个循环,不停从消息队列当中向外取出消息对象,如果没有消息对象可以取出,那么Looper的代码将会产生阻塞(处于等待状态) 

Looper将消息对象取出来之后,Looper将会调用Handler的handleMessage方法来处理消息对象

 Handler基本运行机制的例子:

 MainActivity.java

 1 import android.app.Activity;
 2 import android.os.Bundle;
 3 import android.os.Handler;
 4 import android.os.Message;
 5 import android.view.View;
 6 import android.view.View.OnClickListener;
 7 import android.widget.Button;
 8 
 9 public class MainActivity extends Activity {
10     private Button button;
11     private Handler handler;
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main);
16         button = (Button) findViewById(R.id.button);
17         button.setOnClickListener(new ButtonListener());
18         
19         handler = new firstHandler();
20     }
21     class ButtonListener implements OnClickListener{
22         public void onClick(View v) {
23             
24             Message msg = handler.obtainMessage();//当用户点击按钮时,我们创建一个消息对象,并使用Handler发送对象
25             
26             msg.what = 2;//消息对象的属性,为了证明发送的消息是自己发送的消息
27             
28              handler.sendMessage(msg);
29              /*上面一行代码将消息对象放置到消息队列中,之后   
30                 1.looper将会从消息队列当中将消息对象取出    
31                 2。looper将会找到与消息对象对应的Handler对象
32                 3.looper将会调用handler对象的handleMessage方法,用于处理消息对象
33              */
34         }
35     }
36     //创建Handler类,
37     class firstHandler extends Handler{
38         //要复写该方法,该方法处理消息
39         public void handleMessage(Message msg) {
40             int what = msg.what;
41             System.out.println(what);
42             super.handleMessage(msg);
43         } 
44     }
45 }

activity_main.xml

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity" >
10 
11     
12     <Button
13         android:id="@+id/button" 
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"
16         android:text="button"
17         />
18 </RelativeLayout>

 

 

 

posted @ 2014-03-07 18:53  胡椒粉hjf  阅读(384)  评论(0编辑  收藏  举报