一、为什么必须使用Handler

  1. 线程安全问题

    这个问题要理解的话很容易,如果没有这个约束,那么同时有两个线程对一个UI控件进行调整,
    那么控件自然就没法正常的工作,而为了解决这种二义性(就是一个东西同时被多个使用者使用,
    从而无法判断按哪个使用者来调整)。而Handler永远都是在UI主线程,这就意味着对一个控件的修
    改永远只会有一个线程,不会存在多个线程同时修改一个控件。

  2. 统一管理

    通过Handler可以统一进行对UI的管理,因为Handler采用消息处理的机制。简单理解就是另
    一个线程发送一个编号给消息所在的线程,那么该线程的消息处理程序就会收到该消息并进行处理,
    而消息采用int类型,所以int能够表示多少种数字就以为着有多少消息可以给你使用(因为存在系统
    的消息,所以可能有一部分被系统的消息占有,而不能使用)。

二、Handler介绍

  1. handleMessage(Message msg)

    需要重写的方法,该方法为处理消息的核心函数。

  2. sendEmptyMessage(int what)

    发送指定的消息,该方法为仅仅只是传递一个int值来表示发送的消息类型。

三、重写handleMessage(Message msg)

 Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
//获得通过handler.sendEmptyMessage发送的消息编码
int what = msg.what;
/* 处理代码 */
}
}

四、使用handler发送消息

 handler.sendEmptyMessage(0x101);

五、实例

  1. 新建一个线程来给主线程发送消息

     public class MainActivity extends Activity{
    private static final int send_msg_code = 0x101; Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg){
    int what = msg.what;
    if(what == send_msg_code){
    Toast.makeText(MainActivity.this,"成功",Toast.LENGTH_SHORT).show();
    }
    }
    } @Override
    protected void onCreate(Bundle savedInstanceState)
    {
    new Thread(new Runnable(){
    handler.sendEmptyMessage(send_msg_code);
    }).start();
    }
    }

六、扩展

  1. post(Runnable r)

    将r加入到消息队列中(其实就是利用UI主线程执行一段代码,这样可以随时在其他线程中调整控件)

  2. postDelayed(Runnabled r,long delayMillis)

    将r加入到消息队列中,并在指定时间之后触发(单位为毫秒)

  3. removeMessages(int what)

    取消消息的发送

  4. sendMessages(Message msg)

    通过Message发送消息(这样可以将数据包装进去,一起发送过去)

Android开发之使用Handler刷新UI控件的更多相关文章

  1. Android开发(21)--有关Spinner控件的使用说明

    下拉列表 Spinner,Spinner是一个每次只能选择所有项的一个项的控件.它的项来自于与之相关联的适配器中. Spinner的使用,可以极大提高用户的体验性.当需要用户选择的时候,可以提供一个下 ...

  2. Android开发(二)——自定义圆形控件的使用CircleImageView

    CircleImageView,a fast circular ImageView perfect for profile images. 主要的类CircleImageView: package d ...

  3. android自己定义刷新类控件

    android尽管定义了种类很丰富的控件.可是有的时候这些自己定义的控件还是不能满足我的要求,为了可以适配很多其它的需求,我们须要在原有的基础上进行自己定义控件. 今天我向大家介绍的就是android ...

  4. 安卓学习之--UI控件用法 单选 按钮 下拉框

    1.单选 .RadioGroup 可将各自不同的RadioButton ,设限于同一个Radio 按钮组,同一个RadioGroup 组里的按钮,只能做出单一选择(单选题). <RadioGro ...

  5. iOS 使用UI控件的外观协议UIAppearance进行设置默认UI控件样式

    在iOS开发中,经常会对UINavigationBar的样式进行全局样式.采用的设置方式有两种: 第一种,采用方式如下: [UINavigationBar appearance] 这种是对一类对象的默 ...

  6. ANDROID L——Material Design详解(UI控件)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

  7. [Android] Android开发优化之——对界面UI的优化(2)

    在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多 ...

  8. [Android] Android开发优化之——对界面UI的优化(1)

    在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多 ...

  9. Android UI控件常用库汇总

    现在App的开发已经是非常成熟,涌现了一大批开源的工具.这些项目能够提高我们的搬砖效率.以下是一些在开发中比较常使用的控件和库. ListView WaveSwipeRefreshLayout 水滴效 ...

随机推荐

  1. [国际A类会议] 2018最最最顶级的人工智能国际峰会汇总!CCF推荐!

    copy from :  http://www.sohu.com/a/201860341_99975651 如果今年的辉煌我们没有赶上,那么我们可以提前为明年的大会做准备.现在,AI脑力波小编就为大家 ...

  2. Linux文本行倒序排列6种方法

    Linux文本行倒序排列6种方法 1. 命令方法: nl filename | sort -nr | cut -f2 这个方法很unix风格,使用多命令组合完成某种功能是典型的unix特点 单命令: ...

  3. 京东的Netty实践,京麦TCP网关长连接容器架构

    背景 早期京麦搭建 HTTP 和 TCP 长连接功能主要用于消息通知的推送,并未应用于 API 网关.随着逐步对 NIO 的深入学习和对 Netty 框架的了解,以及对系统通信稳定能力越来越高的要求, ...

  4. 查看sql执行的情况

    今天同事让看一个sql,无意中学到一个查看sql执行情况的命令,以前都是傻傻的等的,今后不用了 SELECT percent_complete FROM sys.dm_exec_requests

  5. 混沌分形之朱利亚集(JuliaSet)

    朱利亚集合是一个在复平面上形成分形的点的集合.以法国数学家加斯顿·朱利亚(Gaston Julia)的名字命名.我想任何一个有关分形的资料都不会放过曼德勃罗集和朱利亚集.这里将以点集的方式生成出朱利亚 ...

  6. SharePoint 2013 开启访问请求 链接丢失

    关于SharePoint 2013 开启访问请求的做法其实很简单,比如http://www.cnblogs.com/jianyus/archive/2014/06/21/3799386.html 这篇 ...

  7. Maven自定义Archetype(zz)

    原文地址:http://www.cnblogs.com/javalouvre/p/5858162.html Maven提供了archetype帮助我们快速构建项目骨架,很便捷.但是,中央仓库中的arc ...

  8. Git SVN 版本控制 简介 总结 MD

    Git 使用准备 主流的 Git 托管网站 GitLab,主流网站,私有仓库也完全免费,功能更强大,页面精美,操作方便 GitHub,最著名的免费Git托管网站,缺点是免费的不支持私有项目 OSChi ...

  9. Netty和Tomcat的区别、性能对比

    一.Netty和Tomcat有什么区别? Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器,但是Netty不一样,他能通过 ...

  10. javascript定义对象写法

    javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义 优点:动态的传递参数 缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存 funct ...