Android开发--多线程中的Handler机制/Looper的介绍
在多线程的开发中,Handler机制如同在主线程中运行一样,只是需要注意在非主线程中Handler机制的作用限制,本文将对这些内容作出解释。
* 如果应用上一个例子的方法对UI界面进行操作,将抛出异常,为此,Android中引入了Handler消息
* 传递机制,来实现在新创建的线程中操作UI界面,下面将对Handler消息传递机制进行介绍
* 一.
* 循环者Looper简介
* 1.首先需要知道一个概念,那就是MessageQueue,在Android中,一个线程对应一个Looper对象
* ,而一个Looper对象又对应一个MessageQueue(消息队列)。MessageQueue用于存放Message,
* 在MessageQueue中,存放的消息以队列的模式执行。
* 2.Looper对象用来为一个线程开启一个消息循环,用来操作MessageQueue。默认情况下,Android
* 中新创建的线程是没有开启消息循环的,但是主线程除外,系统自动为主线程创建Looper对象,开启消息循环。
* 所以,在主线程中,应用下面的代码创建Handler对象时,不会出错,而如果在新创建的非主线程中,应用下面
* 的代码创建Handler对象时,将产生异常信息。
* 如果想要在非主线程中,创建Handler对象,首先要使用Looper类的prepare()方法来初始化一个
* Looper对象,然后创建这个Handler对象,再使用Looper对象的loop()方法,启动Looper,从消息队列里
* 获取和处理消息。
* 3.Looper对象
* 提供了几个方法:
* prepare()----用于初始化Looper
* loop()----用于开启消息循环,当调用了loop()方法后,Looper线程就真正的开始工作了,它会从消息队列中
* 获取消息并处理消息
* quit()----用于结束Looper消息循环
*
* 注意:
* 下载loop()之后的代码不会被执行,这个函数内部是一个消息循环,除非调用quit()方法,loop()才会终止,
* 其后面的代码才能得以运行。
源代码如下:
onCreate()方法:
public class Thread_Handler_Activity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_thread__handler_);LooperHandler thread=new LooperHandler();thread.start();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.activity_thread__handler_, menu);return true;}}
自定义线程类:
public class LooperHandler extends Thread{public Handler handler;@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();//初始化Looper对象Looper.prepare();//实例化一个Handler对象handler=new Handler(){@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);Log.d("BruceZhang", "This is Test!!!");}};Message msg=handler.obtainMessage();msg.what=1;handler.sendMessage(msg);Looper.loop();}}
运行的结果是在日志中显示一条信息,如图所示运行结果:
但是,如果没有对Looper的声明,运行就会抛出如下的异常:
所以,在实际的应用中,应考虑Handler在哪一个线程的中的实现。
Android开发--多线程中的Handler机制/Looper的介绍相关推荐
- Android开发 ---多线程操作:Handler对象,消息队列,异步任务下载
效果图: 1.activity_main.xml 描述:定义了六个按钮 <?xml version="1.0" encoding="utf-8"?> ...
- Android多线程:深入分析 Handler机制源码(二)
前言 在Android开发的多线程应用场景中,Handler机制十分常用 接下来,深入分析 Handler机制的源码,希望加深理解 目录 1. Handler 机制简介 定义 一套 Android 消 ...
- Android开发:图文分析 Handler通信机制 的工作原理
前言 在Android开发的多线程应用场景中,Handler机制十分常用 下面,将图文详解 Handler机制 的工作原理 目录 1. 定义 一套 Android 消息传递机制 2. 作用 在多线程的 ...
- android串口补位,Rust多线程中的消息传递机制
代码说话. use std::thread; use std::sync::mpsc; use std::time::Duration; fn main() { let (tx, rx) = mpsc ...
- 【Android 异步操作】Handler ( 主线程中的 Handler 与 Looper | Handler 原理简介 )
文章目录 一.主线程中的 Handler 与 Looper 二.Handler 原理简介 一.主线程中的 Handler 与 Looper Android 系统中 , 点击图标启动一个应用进程 , 就 ...
- Android中的Handler机制
直接在UI线程中开启子线程来更新TextView显示的内容,运行程序我们会发现,如下错 误:android.view.ViewRoot$CalledFromWrongThreadException: ...
- Android开发之通过接口回调机制加载数据(源代码分享)
Android开发之通过接口回调机制加载数据的简单实现,在实际开发中通过callback方法得到网络加载的数据的使用频率远比通过直接开启线程或异步任务加载数据的频率高的多,这篇文章的代码将简单实现该机 ...
- android做拨号程序代码,Android开发手机拨号程序实现实例源码介绍
Android开发手机拨号程序实现实例源码介绍,在上一篇文章中,我们实现了第一个程序:helloWorld,并成功测试完成.还给大家介绍了Android项目结构和说明.现在写一个手机拨号程序: 首先, ...
- 以下未发布-Android的多线程以及异步消息处理机制,android移动开发基础案例教程源码
1.Message: Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间进行数据交换.除了 what 字段,还可以使用 arg1 和 arg2 来携带整型数据,使用 ...
最新文章
- 怎样在swift中创建CocoaPods
- lncRNA研究利器之TANRIC
- 全连接where 取最新日期_SQL学习笔记(4)——集合、连接与窗口函数
- centos6.5 mysql5.6主从复制
- UVA 10791 Minimum Sum LCM 数论
- sc config tlntsvr start=_全新四川方言剧【卓别林SC方言版】来啦!
- 计算机硬件系统三个子系统,硬件:计算机的体系结构3.ppt
- 服务器漏洞扫描系统的简单搭建
- 计算机中的数据(原码,反码,补码)
- php调用nexmo发送短信,使用Nexmo或Twilio仅使用电话号码进行登录和验证
- IR-CUT选择须知
- 【IntelliJ IDEA】idea修改文件的file is read-only
- 《一本书读懂财报》:系统的输入与输出的体现
- Bilibili到底有多少御坂妹?(二)
- Python大数据培训班特色优势及工作方向
- PRML笔记:1-介绍
- 有梦为马,追寻梦想——基层优秀教育工作者佟鑫海
- 如何通过 DDD(领域驱动设计) 降低软件开发的成本?
- selenium 反爬虫之跳过淘宝滑块验证!首先要搞定JS!
- 关于二叉树的建立和遍历易错问题
热门文章
- C#开发学习——内联表达式
- 异常“本机框架位于调用堆栈顶部,因此无法计算表达式的值”的解决办法
- [最近公共祖先(LCA)]
- hbase shell命令扩展(转自http://www.netfoucs.com/cuirong1986/article/details/7986900)
- InputStream、OutputStream、String的相互转换(转)
- android原理揭秘系列之VacantCell缓存
- 修改ie9默认的quirk模式
- Ubuntu12.04 安装vim出错
- postgresql的安装与配置
- linux shell rm 删除子目录下 所有.o后缀文件