1.handler为android中多线程间通信的一种机制,

@1android中只允许在UI线程(主线程)操作或改变UI,其他线程不能操作UI。

@2其他线程有刷新UI的需要,所以得告诉UI线程,这时候就用到Handler,在handeMessage方法中处理消息。

@3handler可以定义在主线程也可以定义在其他线程,作用不一样。

@4与handler执行相关的类:Handler,Message,MessageQueue,Looper

UI线程:主线程,创建时会自动初始化一个Looper对象,也会创建一个消息队列

Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。

Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。

MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。

Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper。

Thread:线程,负责调度整个消息循环,即消息循环的执行场所。

2.handler的使用

@1用在主线程

---1-定义Handler对象,重写handleMessage方法,在方法里面处理消息,更新UI

    private Handler mHanlder = new Handler(){

        public void handleMessage(android.os.Message msg) {

            numberAdapter = new BlackNumberAdapter(getApplicationContext(), mList, mBnd);
lv_blacknum.setAdapter(numberAdapter); }; };

---2-在其他 线程发送消息,有时需要自己定义消息对象

mHanlder.sendEmptyMessage(BLACKNUM_PREPARED);

@2handler定义在子线程,需要自己创建Looper对象

----流程:

====1.调用Looper.prepare()为当前线程创建Looper对象,此时会自动创建MessageQueue消息队列;2.创建Handler对象,重写handleMessage方法;3.调用Looper.loop()方法启动Looper消息循环

Handler的解析和使用的更多相关文章

  1. Handler Looper 解析

    文章讲述Looper/MessageQueue/Handler/HandlerThread相关的技能和使用方法. 什么是Looper?Looper有什么作用? Looper是用于给线程(Thread) ...

  2. Handler源代码解析-有关Handler那些事

    Handler被成为异步处理大师.相信大家都会用,面试中也常常会问到Handler的底层原理.今天就来看一看Handler的机制. Android的消息处理有四个核心类:Handler.Looper. ...

  3. MySQL Handler变量解析

      http://blog.itpub.net/29254281/viewspace-1159014/ To see the effect of a query do the following st ...

  4. Android Handler面试解析

  5. Android入门(二十一)解析XML

    原文链接:http://www.orlion.ga/685/ 解析XML常用的方式有两种,一种是PULL解析一种是SAX解析. 假设解析数据为: <apps>     <app> ...

  6. Android 简易XML解析

    首先创建在Android工程中创建一个Assets文件夹 app/src/main/assets 在这里添加一个名为 data.xml的文件,然后编辑这个文件,加入如下XML格式内容 <?xml ...

  7. Android系列--DOM、SAX、Pull解析XML

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  8. Android中解析XML

    XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...

  9. Android中XML解析

    package com.example.thebroadproject; public class Book { private int id; private String name; privat ...

随机推荐

  1. 学python3的书

    <Python Cookbook>3rd Edition http://python3-cookbook.readthedocs.io/zh_CN/latest/copyright.htm ...

  2. javascript执行机制

    文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我. 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的 ...

  3. 用lua+redis实现一个简单的计数器功能 (一)

    首先安装环境 依赖环境有 luajit http://luajit.org ngx_devel_kit https://github.com/simpl/ngx_devel_kit echo-ngin ...

  4. 数据库sql语句总结

    1) select 字段名 from 表名 group by 字段名(或是多个字段名,中间用逗号隔开) having count(*)>1:查询表中某一(某几个)字段内的重复数据 Oracle: ...

  5. POJ3624--01背包

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34013   Accepted: 15087 ...

  6. sublime text 3 ctrl+b浏览器启动html

    sublime text 2 和3 都可以快速设置浏览器启动,本人在这里介绍如何不下插件启动浏览器.第一步:打开Tool-->build system  ---> new build sy ...

  7. Git快速入门和常用命令

    一.快速入门 本地初始化一个项目 首先,你需要执行下面两条命令,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中. git config --global us ...

  8. oracle和mysql几点差异对比

    Oracle与mysql差异性总结 之前有个项目是用oracle数据库进行开发,需要把数据库改成mysql,遇到了一些地方需要注意的,就简单记了下来. 备注: 再把oracle转成mysql的时候,表 ...

  9. java学习笔记之String类

    String类总结 String类概述: java.lang.String 类是字符串操作类 String类的常用构造方法: //1.直接赋值 String str= "hellojava& ...

  10. poj Minimum( CutStoer Wagner算法)

    Minimum Cut 题目: 给出一张图.要求你删除最小割权和图. 算法分析: ////////////////////     转载 --- ylfdrib   ///////////////// ...