Android中Looper的实现原理,为什么调用Looper.prepare()就在当前线程关联了一个Looper对象,它是如何实现的。

1、线程间通信机制 首先,looper、handler、messagequeue三者共同实现了android系统里线程间通信机制。如在A、B两个子线程之间需要传递消息,首先给每个子线程绑定一套handler、looper、messagequeue机制,然后这三个对象都与其所属线程对应。然后A线程通过调用B线程的Handler对象,发送消息。这个消息会被Handler发送到B线程的messagequeue中,而属于B线程的Looper对象一直在for循环里无限遍历MessageQueue, 一旦发现该消息队列里收到了新的消息,就会去对消息进行处理,处理过程中会回调自身Handler的heandleMessage方法。从而实现了不同线程间通信。 2、Looper实现原理 Looper类里包含一个消息队列对象和一个线程对象。当创建Looper时,会自动创建一个消息队列,同时将内部线程对象指向创建Looper的线程。当开启Looper后(looper.loop()),会自动进入无限for循环中,不断去遍历消息队列,如果没有消息则阻塞,有消息则回调handler的handlemessage方法进行处理。 3、Looper.prepare() 首先,要使用Looper机制一般会在当前线程中创建Handler对象,里面会自动创建一个looper对象和消息队列,这里面的消息队列属于当前线程空间。但此时的looper还不会去遍历,也没有绑定到当前线程。其中,looper对象内部也包含一个空消息队列对象和空线程。通过Looper.prepare()方法,先让该消息队列指向当前线程的消息队列,让空线程也指向当前线程。从而实现了绑定。

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Android(安卓)编程下的TraceView 简介及其案例实战
  3. Android防止重复点击的解决办法
  4. android 面试经典(5)
  5. 很有用的一篇文章,对于android新手,Log的分析之二
  6. Android(安卓)绘制线程动画
  7. Android(安卓)实现通知栏显示多个notification
  8. Android(java)学习笔记73:线程组的概述和使用
  9. android fw systemserver之MountService分析

随机推荐

  1. android 属性文件default.prop与adb
  2. Android(安卓)UI中的style和theme以及Ale
  3. Android应用程序组件Content Provider简
  4. Android(安卓)JNI/Hardware 加载(一)
  5. Android(安卓)手机无法连接mac解决办法
  6. Android中如何在命令行中查看某个文件的
  7. Android(Xamarin)之旅(三)
  8. Android(安卓)- R资源未找到至java文件报
  9. android 机顶盒开发-----GridView
  10. Android(安卓)EventBus 封装(支持多个粘性