Android开发--多线程中的Handler机制/Looper的介绍
来源:互联网 发布:网络分层及其对应协议 编辑:程序博客网 时间:2024/06/12 00:21
在多线程的开发中,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机制、Looper的介绍与整理
- android中的多线程,handler,message,looper,messagequeue
- Android中的Handler,Looper,Message机制
- Android中的Handler,Looper,Message机制
- Android中的Thread, Looper和Handler机制
- android looper handler 多线程
- android Looper Handler机制
- Android的Message机制---Handler、Message、Looper
- android的thread、looper、handler机制
- Android的Handler,Looper消息机制问题
- android Handler Looper MessageQueue机制的原理
- Android消息机制(Handler、MessageQueue、Looper)详细介绍
- android基础--android中的多线程--Handler, Looper, MessageQueue, Message类
- android笔记--android中的多线程--Handler, Looper, MessageQueue, Message类
- Android中的Looper,MessageQueue,Handler的理解
- Android Handler Message Looper 机制
- Android之Looper-Handler机制
- 从零开始学习VC++6.0之并口控制(第一课 环境配置)
- 杭电OJ题 1592 Half of and a Half 解题报告
- 2013年,快递行业将进入“多事之秋”?
- Extjs4.0数据包(Ext.data.package)以及数据模型(Ext.data.model介绍)详解
- strus2注解
- Android开发--多线程中的Handler机制/Looper的介绍
- struts2防止表单重复提交
- struts2的文件上传和下载
- struts2类型转换器
- C++ 标准库 vector list map使用方法
- .padLeft() and .padRight()
- struts2配置文件
- ubuntu12.04 安装 uWsgi
- 关于虚函数的那些事