`

Android知识梳理:消息机制之Looper

 
阅读更多
Android消息机制中,Looper处于核心地位,它类似于一个消息泵,不断从MessageQueue中读取数据,然后分发给Handler去处理。
一、官方建议的使用形式:
	class LooperThread extends Thread {
		public Handler mHandler;

		public void run() {
			Looper.prepare();

			mHandler = new Handler() {
				public void handleMessage(Message msg) {
					// process incoming messages here
				}
			};

			Looper.loop();
		}
	}


二、Looper源码阅读:
上述子线程中调用了Looper.prepare()和Looper.loop()到底做了什么事情?
1、先看prepare()方法:
    public static void prepare() {
        if (sThreadLocal.get() != null) {
            throw new RuntimeException("Only one Looper may be created per thread");
        }
        sThreadLocal.set(new Looper());
    }

prepare是一个静态方法,那就意味着可以直接通过类名访问,这个方法只做了一件事,就是创建一个Looper对象,把这个对象放到sThreadLocal中。在创建之前会判断sThreadLocal是否为空,即保证当前只有一个Looper对象。

那创建Looper对象时做了什么事情呢?
    private Looper() {
        mQueue = new MessageQueue();
        mRun = true;
        mThread = Thread.currentThread();
    }

创建一个消息队列;
设置run运行变量;
跟当前线程绑定;



2、loop方法:
public static void loop() {
 while (true) {
            Message msg = queue.next(); // might block
            if (msg != null) {
                if (msg.target == null) {
                    // No target is a magic identifier for the quit message.
                    return;
                }
msg.target.dispatchMessage(msg);
msg.recycle();
}
}

上述方法只截取了部分,可见也是一个静态方法,做的事情也很简单,很单调:
不停的检查MessageQueue,拿到Message,根据Message的target将消息分发给Handler,分发完成之后回收消息;
msg.target是handler,这句话是在looper中执行的,然后进入dispatchMessage(msg),也就是说,handler的dispatchMessage(msg)这个方法是在looper的线程中执行的,二dispatchMessage就会执行handler 的handlerMessage方法了,这个显然是在looper的线程中执行的了。

总之,handler的线程就是提供下handler这个实例变量而已,而真正循环处理消息的线程是looper所在的线程了。

3、setMainLooper和getMainLooper方法可以存取主线程的Looper对象。

总结:
Thread和Looper是一一对应关系。
Thread和MessageQueue也是是一一对应关系。
俗一点说:一个Thread只有一个Looper对象,一个MessageQueue对象;
Looper分发消息是阻塞式的(might block),即一个消息分发完成之后才会处理下一个消息;
“Looper就是一个While循环,不停的从MessageQueue读取Message并分发给Handler处理,而调用Looper.loop()启动了循环”


后续文章:
Android知识梳理:消息机制之MessageQueue
Android知识梳理:消息机制之Handler
Android知识梳理:消息机制之Message
分享到:
评论

相关推荐

    Java基础+Android面试题

    2. Android消息机制:包括Handler、Looper、MessageQueue和Message的概念及其在Android中的消息处理机制。 3. Android事件分发机制:解析了触摸事件在Android系统中的传递流程和处理。 4. AsyncTask详解:提供了在...

    Android代码-Android 一些重要知识点解析整理

    Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系 Android消息循环分析 Android Activity developer 官网 (强烈推荐 dev guide) Android的启动模式(android:launchMode) ...

    一线互联网大厂Android 高级开发面试题以及答案整理(1307页)

    Looper 是 Android 中的一种消息循环机制,它可以在一个线程中处理消息。Looper 的使用非常广泛,在 Android 开发中,它是必备的知识点之一。 1. Looper 的作用 Looper 的主要作用是将消息从一个线程传递到另一个...

    Android小知识整理

    在Android开发领域,掌握一些关键的小知识能够极大地提升开发效率和代码质量。以下是一些根据多年经验整合的Android基础知识: 1. **Activity生命周期**:理解Activity的onCreate(), onStart(), onResume(), ...

    Android 高级开发面试题以及答案整理

    ### Android高级开发面试题——Handler相关知识 #### 一、HandlerLooperMessage关系 **1. Handler、Looper与Message之间的关系** - **Handler**: 主要用于发送消息和处理消息。它作为一个桥梁,使得主线程和子...

    Android最新版最全面试题+知识点整理

    这份“Android最新版最全面试题+知识点整理”提供了超过300道题目,旨在帮助开发者深入理解和巩固Android平台的关键概念。以下是对这些知识点的详细阐述: 1. **Android架构**:了解Android系统的分层结构,包括...

    Android面试题及知识点

    以下是一些主要的Android面试题及相关的知识点,这些内容由大神精心整理,对准备Android面试的开发者非常有帮助。 1. **Android基础知识** - 应用程序组件:Activity、Service、BroadcastReceiver、...

    android面试题(精心收集整理).pdf 高清pdf下载.rar 下载

    《Android面试题(精心收集整理)》是一份针对Android开发者准备面试的重要参考资料,这份高清PDF文档包含了Android开发领域的各类常见面试问题和解答,旨在帮助求职者深入理解和掌握Android技术体系,提升面试成功率...

    Android的小知识整理

    以下是对"Android的小知识整理"的详细解读。 1. **Activity生命周期**:理解Activity的onCreate(), onStart(), onResume(), onPause(), onStop()和onDestroy()等生命周期方法至关重要。它们决定了应用在不同状态下...

    张泽华Android面试题整理

    1. **Android基础知识**:包括Android应用的基本架构(Activity, Service, BroadcastReceiver, ContentProvider),Android组件间的通信机制,以及AndroidManifest.xml文件的作用。 2. **UI设计与布局**:涉及...

    Android-阳哥面试宝典V3.0.pdf

    这份资源包含了一份PDF文档,详细梳理了Android开发中的关键知识点,以下是对其中主要内容的详细阐述: 一、Android基础 1. 安卓系统架构:理解Linux内核、HAL、Android运行时、应用程序框架和应用层的关系。 2. ...

    收集整理的Android面试资料精编汇总文档资料(23个).zip

    - Handler/Looper/Messenger:消息机制,解决线程间通信问题。 - Binder:Android进程间通信(IPC)的核心机制,服务和服务的交互。 8. **高级面试题.docx**: - 可能包含更深层次的问题,如Android系统定制、热...

    Android审查::fire:Android复习资料汇总(每周持续更新〜)

    - **多线程和并发**:掌握Handler、Looper、Thread和ExecutorService等多线程处理机制。 3. **Android性能优化** - **内存管理**:了解如何避免内存泄漏,使用Memory Profiler分析应用内存状况。 - **UI流畅性**...

    阿里、腾讯等一线互联网大厂Android 高级开发面试题以及答案整理(1307页).pdf

    主线程(UI线程)中不需要显式调用Looper.prepare(),因为在Android的UI线程启动时,系统已经自动为其创建了Looper和消息队列。这就是为什么主线程可以直接创建Handler实例而不会崩溃的原因。 知识点三:深入...

    Android 书籍整理

    这份"Android 书籍整理"的压缩包文件显然是一个宝贵的学习资源,它包含了多种关于Android开发的书籍,旨在为正在学习或想要深入Android技术的开发者提供指导。下面我们将详细探讨这些书籍可能涵盖的知识点。 首先,...

    Android最新面试题整理,有道云笔记格式

    这份"Android最新面试题整理,有道云笔记格式"的资料很可能包含了当前Android开发者在面试过程中可能会遇到的关键问题。以下是一些可能涵盖的知识点,以及它们的重要性: 1. **基础知识**:面试通常会从基础开始,...

    android面试全题

    1. Handler、Looper与Message:理解消息队列机制,用于解决主线程阻塞问题。 2. AsyncTask:简单的异步任务执行框架,但存在性能瓶颈,不建议在大型项目中使用。 3. IntentService:用于在后台执行一次性任务,会...

    深入理解Android:卷I--详细书签版

     对于Android应用开发工程师而言,本书中关于Binder,以及sp、wp、Handler和Looper等常用类的分析或许能帮助你迅速适应Android平台上的开发工作。  (2)Android系统开发工程师  Android系统开发工程师常常需要...

    Android面试题整理

    - **Handler-Looper-Messenger**:理解消息队列机制,处理主线程与子线程的交互。 - **AsyncTask**:轻量级的异步任务执行框架,适用于短时间的任务。 - **Thread和Runnable**:基础的线程操作,如何避免内存泄漏...

    Android底层与框架学习步骤[整理].pdf

    消息循环机制指的是Android通过Handler、Looper和Message来实现消息的排队和分发。主线程默认已经创建了Looper,工作线程需要手动创建和启动Looper。 4. Android中的服务和IntentService: 服务(Service)用于在...

Global site tag (gtag.js) - Google Analytics