zoukankan      html  css  js  c++  java
  • 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>

     

  • 相关阅读:
    SQL SERVER 全文索引分词
    Json官方介绍
    SQL Try Catch(转载http://www.cnblogs.com/jimmyray/archive/2011/08/02/2125069.html)
    SQL函数记录
    SQL事务处理代码(SQL Server 2000 & 2005)
    SQL通用分页存储过程
    [导入]SoapExtension 1.0 的问题与解决
    BugTracker.NET 汉化手札
    [导入]我对J2EE和.NET的一点理解
    PostgreSQL 8.0.2 应用报告
  • 原文地址:https://www.cnblogs.com/LO-ME/p/3587040.html
Copyright © 2011-2022 走看看