原址:http://blog.csdn.net/wtianok/article/details/26283353
在Android中,耗时的操作常常需要由子线程来完成,但是在子线程中,无法完成对UI的修改,所以,需要使用handler机制来进行主线程与子线程的通信。今天因为项目需要,研究了一下这个东东,这里与大家分享一下。不一定对,但是一定好用。

1、在Activity中需要声明一个Handler,并在onCreate()方法中初始化。代码如下:

[java] view plaincopy print?
  1. static Handler handler;
  2. ...
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. if (savedInstanceState == null) {
  8. getSupportFragmentManager().beginTransaction()
  9. .add(R.id.container, new PlaceholderFragment()).commit();
  10. }
  11. // 处理消息
  12. handler = new Handler() {
  13. public void handleMessage(android.os.Message msg) {
  14. super.handleMessage(msg);
  15. switch (msg.what) {
  16. case 0:
  17. //处理what=1的消息
  18. break;
  19. case 1:
  20. //处理what=2的消息
  21. break;
  22. default:
  23. break;
  24. }
  25. }
  26. };
  27. }

handlerMessage方法的作用就是从消息队列中读取消息并根据消息的不同内容做相应的处理

2、你需要一个线程,用来做耗时的工作,并发送消息。线程的代码如下:

[java] view plaincopy print?
  1. private class WifiThread implements Runnable {
  2. @Override
  3. public void run() {
  4. //do something
  5. Message msg = Message.obtain();
  6. msg.what = 1;
  7. handler.sendMessage(msg);
  8. }

线程重写的run()方法中,首先要从新建一个消息,然后初始化消息,也就是将信息写入到消息中,然后就是发送消息。

3、在Activity中启动线程

[java] view plaincopy print?
  1. new WifiThread().run()

4、done

实际上,每一个线程都有一个Looper对象和一个消息队列,Looper将循环的检测消息队列并从中取出消息。handler的默认初始化函数中将handler对象与这个Looper绑定,这样就能通过handler这个对象向消息队列中发送和接受消息,就是这么简单。当然,handler还有一个post()方法族,可以将runnable对象加入到消息队列中,这里就不多做介绍了。

android中handler简单用法相关推荐

  1. Android中Seekbar简单用法

    Seekbar是Android中的拖动条.它是继承ProgressBar编写的.我们在音频播放,视频播放的时候往往需要用到这个控价.这里我们简单介绍一下这个控件的使用.废话不多说,直接上代码. act ...

  2. Android中handler的使用及原理---学习笔记

    Handler类的基本介绍以及使用: Android中UI操作是线程不安全的操作,如果有多个线程并发操作UI组件,就会出现线程安全问题,所以Android中制定了一个规则:在Android中只允许主线 ...

  3. Android中Handler的使用

    在Android开发中,我们常常会遇到这样一种情况:在UI界面上进行某项操作后要运行一段非常耗时的代码,比方我们在界面上点击了一个"下载"button,那么我们须要运行网络请求,这 ...

  4. Android中Parcelable接口用法

    --  通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象.也可以将Parcel看成是一个流,通过writeToPa ...

  5. android 时间戳 转日期格式,在Android中转换为简单日期格式或Unix时间戳日期?

    我收到日期(2015-03-20T06:34:01.831183 + 01:00)从服务器这不是简单的日期格式,我想这种类型的日期转换为简单的日期格式一样(yyyyMMddHHmmssSSSS)在An ...

  6. Android中Parcelable接口用法 和 Serializable实现与Parcelabel实现的区别

    1. Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel. ...

  7. android linearlayout最大高度,Android中最简单最常用的LinearLayout线性布局

    原标题:Android中最简单最常用的LinearLayout线性布局 良好的布局设计对于UI界面至关重要,在前面也简单介绍过,目前Android中的布局主要有6种,创建的布局文件默认为Relativ ...

  8. Python中yield简单用法

    Python中yield简单用法 你或许知道带有yield的函数在Python中被称之为generator,那何为 generator? 我们暂时抛开generator,先从一个常见编程题目开始,循序 ...

  9. android 类型.this,Android中this的用法

    关于Android中this的用法解释 问题由来 由于很多同学在学习Android时候没有对Java有很深的了解,很多人都会对代码中各种各样的this产生疑惑. 以<第一行代码Android&g ...

最新文章

  1. SAP之成本中心类型与功能范围
  2. git提交输入密码_git提交到自己的服务器,每次都要输入密码
  3. python 仪表盘数据显示_跟小白学Python数据分析——绘制仪表盘
  4. vs2019c语言头文件的路径,vs2019设置及第三方库的使用,
  5. 极致的线上产品设计与终极数据分析工具,两者缺一不可(中)
  6. gradle生命周期
  7. cocos2dx 3.x(屏幕截图的两种方法)
  8. 文件字节输出流 java
  9. Swift实现UIKit Dynamic动画
  10. java 自动生成mybatis文件_如何自动生成Mybatis的Mapper文件详解
  11. SpringMvc-参数为数组
  12. 小米回应“米家”商标争议;人人 App 回归社交市场;TiDB 2.1.19 发布| 极客头条...
  13. Google 5.5亿美金投资了京东?
  14. clion打开时如何不自动重新打开上一次的项目
  15. 算法基础部分2-分治
  16. ArrayList的初始化常用方式,扩容,和应用(去重)
  17. 搭建Android的开发环境
  18. 自定义封装无人值守Windows10镜像
  19. Java从入门到放弃系列
  20. 分享一个边看视频就能边练口语的学习网站,超实用,不仅仅能学英语

热门文章

  1. sqlmap的篡改绕过WAF
  2. iscsi网络存储服务
  3. html基础知识补全
  4. [CTO札记]研究:日本Rakuten(乐天)
  5. Flask 框架 是 Python 中最流行的 Web 框架之一
  6. 机器学习——支持向量机(SVM)
  7. c语言中.和-区别,c语言中-和.的区别
  8. jquery的ajax异步请求接收返回json数据
  9. Java中IDEA,Springboot实现手机获取验证码和倒计时
  10. sql时间转换时分秒_SQL时分秒之间相互转换