Thread的run方法如下:

@Override
public void run() {mTid = Process.myTid();Looper.prepare();synchronized (this) {mLooper = Looper.myLooper();notifyAll();}Process.setThreadPriority(mPriority);onLooperPrepared();Looper.loop();mTid = -1;
}

代码Looper.loop()是一个for死循环,然后突然想到主线程中也有Looper为什么不卡主线程于是找到了ActivityThread的源码

public static void main(String[] args) {

Looper.prepareMainLooper();

ActivityThread thread = new ActivityThread();

thread.attach(false);

if (sMainThreadHandler == null) {

sMainThreadHandler = thread.getHandler();

}

if (false) {

Looper.myLooper().setMessageLogging(new LogPrinter(Log.DEBUG, “ActivityThread”));

} // End of event ActivityThreadMain.

Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);

Looper.loop(); throw new RuntimeException(“Main thread loop unexpectedly exited”);

}

main方法的退出就是Looper.loop();的执行完毕,所有事件都是Looper的监听,主线程本事就是个阻塞。

Android是事件驱动,Looper内部是一个while死循华,只有程序退出后循环才会停止,如果Looper使用中死掉了,任何事件都不会有反应了。事件只会阻塞Looper,而Looper不会阻塞事件。

Handler消息机制(六):Looper.loop()为什么不会阻塞主线程?相关推荐

  1. Handler消息机制-Native层

    Handler消息机制-Native层 android12-release Handler消息机制-FWK层 1. MessageQueue连接Native层 1.1 nativeInit初始化 Na ...

  2. Android Framework学习(八)之Handler消息机制(Native层)解析

    在深入解析Android中Handler消息机制一文中,我们学习了Handler消息机制的java层代码,这次我们来学习Handler消息机制的native层代码. 在Java层的消息处理机制中,Me ...

  3. Android中Handler消息机制

    作用:跨线程通信. 应用:AsyncTask.retrofit都对Handler进行了封装. 四要素:Message.MessageQueue.Looper.Handler Message简介: 线程 ...

  4. Android Handler消息机制源码分析

    一,前言 众多周知, Android 只允许在主线程中更新UI,因此主线程也称为UI线程(ActivityThread). 如此设计原因有二: (1) 由于UI操作的方法都不是线程安全的,如果多个线程 ...

  5. Handler消息机制介绍,流程梳理

    文章目录 前言 基本使用 发送和处理Runnable 发送和处理Message 流程梳理 获取消息 发送消息 消息入队 消息出队 理解 源码分析 前言 Handler 是Android 的消息处理机制 ...

  6. Android Handler消息机制不完全解析

    1.Handler的作用 Android开发中,我们经常使用Handler进行页面的更新.例如我们需要在一个下载任务完成后,去更新我们的UI效果,因为AndroidUI操作不是线程安全的,也就意味着我 ...

  7. Android进阶知识树——Android Handler消息机制

    1.概述 在安卓程序启动时,会默认在主线程中 运行程序,那如果执行一些耗时的操作则UI就会处于阻塞状态,出现界面卡顿的现象,再者用户的多种操作,系统是如何做到一一处理的,系统又是如何管理这些任务的,答 ...

  8. Handler消息机制详解

    Handler机制是Android开发中最常见的机制,可以说贯穿整个Android,在探究Handler机制原理之前,我们先来捋一下用法 1.handler.post(Runnable) 2.hand ...

  9. Android Handler消息机制源码解析

    好记性不如烂笔头,今天来分析一下Handler的源码实现 Handler机制是Android系统的基础,是多线程之间切换的基础.下面我们分析一下Handler的源码实现. Handler消息机制有4个 ...

最新文章

  1. node mysql await_node.js中对 mysql 进行增删改查等操作和async,await处理
  2. lvs服务器需要开启web服务么_如何检测 Web 服务请求丢失问题
  3. LTE/NR用户接入过程笔记
  4. 阿尔法大蛋智能机器人功能_智能机器人怎么选?阿尔法蛋大蛋2.0助力孩子新学期...
  5. php判断与网站访问时间,织梦CMS模板用php判断某个时间段显示和隐藏内容
  6. 吴恩达深度学习2.3笔记_Improving Deep Neural Networks_超参数调试 和 Batch Norm
  7. 如何利用Pre.im分发iOS测试包
  8. android编程设备信息,Android获取当前手机设备信息工具类详解
  9. Windows 10 设定静态路由
  10. 相比于深度学习,传统的机器学习算法难道就此没落了吗,还有必要去学习吗?...
  11. 利用Apply的参数数组化来提高代码的优雅性,及高效性
  12. 炸裂!手摸手教你如何吃透一个 Java 项目,yyds
  13. Maven之(七)pom.xml配置文件详解
  14. visual c++ build tools下载地址
  15. excel表格如何转换成word表格_Word表格如何转为Excel表格?这2个小技巧轻松搞定!
  16. 前端框架介绍篇(小白专属)
  17. 服务器硬件与 Linux 初体验
  18. 物流人必备宝藏软件安利——Microcity
  19. 八皇后问题动态演示_Qt5实现
  20. 【Java】使用smtp和pop3协议,实现邮件收发

热门文章

  1. wpf每隔一小时_包河区徐河排涝站24小时不间断运作 11座区管泵站全面应战保安澜...
  2. android 调用js怎么获取返回值_js 函数
  3. java 移动支付接口开发,移动支付平台间接口报文解析技术核心架构实现、及平台交易处理项目全程实录教程...
  4. php前面有人排队,PHP实现打印类(实现队列排队打印)
  5. 17、计算机图形学——辐射度量学
  6. C++对象模型2——编译器生成构造函数的几种情况
  7. C++ 之new和delete释放内存
  8. stm32单片机屏幕一直闪_stm32实现LED灯的闪烁
  9. Windows Server 2008自定义任务栏和开始菜单
  10. 基于nginx的正向代理实现