1. 什么是 Handler
2. Handler、Looper和 MessageQueue 的基本原理
3. 一个简单的例子
1. 什么是 Handler
2. Handlr、Looper和 MessageQueue 的基本原理
Handler 将消息放进 MessageQueue 队列中(FIFO)
Looper 不断将消息取出, 如果队列中无消息则阻塞
取出的消息交给 Handler 去处理
此种机制在以后会逐步理解
3. 一个简单的例子
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="first.pack.MainActivity$PlaceholderFragment" > 10 11 <Button 12 android:id="@+id/firstButton" 13 android:layout_width="wrap_content" 14 android:layout_height="wrap_content" 15 android:text="Handle" /> 16 17 </RelativeLayout>
1 public static class PlaceholderFragment extends Fragment { 2 3 private Button button; 4 private Handler 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, 13 false); 14 15 button = (Button)rootView.findViewById(R.id.firstButton); 16 button.setOnClickListener(new ButtonListener()); 17 18 handler = new FirstHandle(); //使用FirstHandle(继承Handle类)来生成handle对象 19 20 return rootView; 21 } 22 23 class ButtonListener implements OnClickListener{ 24 25 @Override 26 public void onClick(View v) { 27 Message msg = handler.obtainMessage(); //同一个handler首先产生一个消息 28 msg.what = 2 ; //消息what参数等于2 29 handler.sendMessage(msg); //利用同一个handle发送消息至队列,Lopper从队列中取出消息, \会调用handle的handleMessage函数来处理消息 30 } 31 } 32 33 class FirstHandle extends Handler{ //用来处理handle从队列中取出的消息, 参数是msg 34 @Override 35 public void handleMessage(Message msg) { 36 // TODO Auto-generated method stub 37 int what = msg.what; 38 Log.i("tag","What"+ what); 39 } 40 } 41 }
每点击一次Handle按钮,打印一个what:2
继续看一下面几篇文章才能理解这个!!