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>