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>

     

  • 相关阅读:
    Spring基础知识
    Hibernate基础知识
    Struts2基础知识
    在eclipse里头用checkstyle检查项目出现 File contains tab characters (this is the first instance)原因
    java后台获取cookie里面值得方法
    ckplayer 中的style.swf 中的 style.xml 中的修改方法
    java hql case when 的用法
    Windows下Mongodb安装及配置
    Mongodb中经常出现的错误(汇总)child process failed, exited with error number
    Mac 安装mongodb
  • 原文地址:https://www.cnblogs.com/LO-ME/p/3587040.html
Copyright © 2011-2022 走看看