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



android Looper类介绍

Android-Looper类介绍 您的评价:        收藏该经验        Andr...
  • songjunyan
  • songjunyan
  • 2014年09月15日 17:41
  • 853

Android的Looper类使用的5个要点

1. Looper类用来为一个线程开启一个消息循环。 默认情况下android中新诞生的线程是没有开启消息循环的。(主线程除外,主线程系统会自动为其创建Looper对象,开启消息循环。) L...
  • yangkeshihaer
  • yangkeshihaer
  • 2014年07月05日 15:06
  • 278

Android Looper用法及原理

Looper是android为线程间异步消息通信提供的一种机制,利用Looper机制可以方便我们实现多线程编程时线程间的相互沟通。当然,如果不用Looper而采用其它的线程间通信方式(像管道,信号量,...
  • linghaidong
  • linghaidong
  • 2017年01月25日 15:00
  • 1385

安卓多线程编程系列7:使用Looper的不同方式(子线程中实例化Handler方式)

在Activity主线程中实例化Handler,不需要定义Looper,因为主线程中有一个默认的Looper对象。而在子线程中实例化Handler,必须要定义Looper循环消息队列和消息队列循环结束...
  • luoshiwutai
  • luoshiwutai
  • 2016年03月04日 16:50
  • 815

Android Java层 Looper 机制

写在前面本节主讲Android消息循环机制中java 部分:Jave层的Looper,MessageQueue,Handler,涉及到native部分会先做简单解释跳过。后续会在第三节将jave与na...
  • chwan_gogogo
  • chwan_gogogo
  • 2015年07月19日 11:27
  • 2052

[M0]Android Native层Looper详解

前言 我们知道Java 层的Looper 的消息队列在没有消息处理的时候,会wait在MessageQueue.next() 函数里,对于MessageQueue.next() 函数是如何实现的wai...
  • chwan_gogogo
  • chwan_gogogo
  • 2015年07月19日 11:24
  • 2034

Android Looper类代码分析

本文将分析一下Looper类的实现及其应用,代码位于 frameworks/native/lib/utils/Looper.cpp。主要分为如下几个部分: 1. epoll系统调用接口简介 2....
  • fuyajun01
  • fuyajun01
  • 2014年07月22日 23:12
  • 3783

Android 线程 Looper.prepare()、Looper.loop() 使用

优化项目过程中发现了一个很Low的问题,整理一下,备忘: 说问题之前先看下HandlerThread的定义 一个封装了looper的线程:   Looper用于封装了android线程...
  • yangdeli888
  • yangdeli888
  • 2015年03月16日 21:35
  • 9924

Android中Looper的实现原理

Android中Looper的实现原理,为什么调用Looper.prepare()就在当前线程关联了一个Looper对象,它是如何实现的。 1、线程间通信机制 首先,looper、handler...
  • syc434432458
  • syc434432458
  • 2015年09月08日 11:30
  • 1307

Looper、Handler在子线程中的应用

Looper类:为一个线程开启一个消息循环,里面有一个消息队列,新线程是没有开启消息循环的,所以需要用到Looper的方法创建消息循环(主线程除外,主线程会自动为其创建Looper对象,开启消息循环)...
  • namePeng
  • namePeng
  • 2016年04月28日 16:45
  • 1187
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android的Looper类使用的5个要点
举报原因:
原因补充:

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