Android的Looper类使用的5个要点

转载 2012年03月27日 13:33:59

http://www.cnblogs.com/hnrainll/archive/2012/01/06/2314511.html

1. Looper类用来为一个线程开启一个消息循环。
    默认情况下android中新诞生的线程是没有开启消息循环的。(主线程除外,主线程系统会自动为其创建Looper对象,开启消息循环。)
    Looper对象通过MessageQueue来存放消息和事件。一个线程只能有一个Looper,对应一个MessageQueue。

2. 通常是通过Handler对象来与Looper进行交互的。Handler可看做是Looper的一个接口,用来向指定的Looper发送消息及定义处理方法。
    默认情况下Handler会与其被定义时所在线程的Looper绑定,比如,Handler在主线程中定义,那么它是与主线程的Looper绑定。
mainHandler = new Handler() 等价于new Handler(Looper.myLooper()).
Looper.myLooper():获取当前进程的looper对象,类似的 Looper.getMainLooper() 用于获取主线程的Looper对象。

3. 在非主线程中直接new Handler() 会报如下的错误:
E/AndroidRuntime( 6173): Uncaught handler: thread Thread-8 exiting due to uncaught exception
E/AndroidRuntime( 6173): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
原因是非主线程中默认没有创建Looper对象,需要先调用Looper.prepare()启用Looper。

4. Looper.loop(); 让Looper开始工作,从消息队列里取消息,处理消息。

    注意:写在Looper.loop()之后的代码不会被执行,这个函数内部应该是一个循环,当调用mHandler.getLooper().quit()后,loop才会中止,其后的代码才能得以运行。

5. 基于以上知识,可实现主线程给子线程(非主线程)发送消息。

 

sourceurl:http://www.cnblogs.com/ctou45/archive/2012/01/06/2314191.html



相关文章推荐

高级需求分析师培训要点,如何正确编写需求用例的5个提示!

用例文档的编写最困难的地方在于,这是一种单调的写作方式,又需要富有完美的表达能力,使读者愿意阅读。当用例书写完毕以后,需要分析和回顾已写完的用例,使思路不断地被完善和清晰起来。用例编写的注意力应该放在...

android 多线程 looper handler

  • 2011年07月31日 19:06
  • 48KB
  • 下载

Android ExpandableListView 使用要点笔记

最近项目中用到了 ExpandableListView,对其用法深入了解了一下,在此 Mark一下! 展开某一个group item后 packag...
  • FX_SKY
  • FX_SKY
  • 2013年11月14日 15:12
  • 2957

android looper分析

  • 2011年04月01日 15:44
  • 30KB
  • 下载

Android中的Handler、Looper和MessageQueue的使用以及原理

提到Handler大家一定都不陌生,通常我们都是在子线程通过Handler切换到主线程中去更新View的显示内容,然而很少接触Looper更没有感觉到MessageQueue的存在,然而三者是密切相关...

android 之 Hnadler 、Message 、Looper

  • 2013年05月22日 19:54
  • 2.73MB
  • 下载

初步窥探android线程间通讯:Handler, Looper, MessageQueue的使用方法

初步窥探andriod线程间通讯
  • pramb
  • pramb
  • 2015年03月27日 10:44
  • 180
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android的Looper类使用的5个要点
举报原因:
原因补充:

(最多只允许输入30个字)