Handler消息机制(六):Looper.loop()为什么不会阻塞主线程?
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()为什么不会阻塞主线程?相关推荐
- Handler消息机制-Native层
Handler消息机制-Native层 android12-release Handler消息机制-FWK层 1. MessageQueue连接Native层 1.1 nativeInit初始化 Na ...
- Android Framework学习(八)之Handler消息机制(Native层)解析
在深入解析Android中Handler消息机制一文中,我们学习了Handler消息机制的java层代码,这次我们来学习Handler消息机制的native层代码. 在Java层的消息处理机制中,Me ...
- Android中Handler消息机制
作用:跨线程通信. 应用:AsyncTask.retrofit都对Handler进行了封装. 四要素:Message.MessageQueue.Looper.Handler Message简介: 线程 ...
- Android Handler消息机制源码分析
一,前言 众多周知, Android 只允许在主线程中更新UI,因此主线程也称为UI线程(ActivityThread). 如此设计原因有二: (1) 由于UI操作的方法都不是线程安全的,如果多个线程 ...
- Handler消息机制介绍,流程梳理
文章目录 前言 基本使用 发送和处理Runnable 发送和处理Message 流程梳理 获取消息 发送消息 消息入队 消息出队 理解 源码分析 前言 Handler 是Android 的消息处理机制 ...
- Android Handler消息机制不完全解析
1.Handler的作用 Android开发中,我们经常使用Handler进行页面的更新.例如我们需要在一个下载任务完成后,去更新我们的UI效果,因为AndroidUI操作不是线程安全的,也就意味着我 ...
- Android进阶知识树——Android Handler消息机制
1.概述 在安卓程序启动时,会默认在主线程中 运行程序,那如果执行一些耗时的操作则UI就会处于阻塞状态,出现界面卡顿的现象,再者用户的多种操作,系统是如何做到一一处理的,系统又是如何管理这些任务的,答 ...
- Handler消息机制详解
Handler机制是Android开发中最常见的机制,可以说贯穿整个Android,在探究Handler机制原理之前,我们先来捋一下用法 1.handler.post(Runnable) 2.hand ...
- Android Handler消息机制源码解析
好记性不如烂笔头,今天来分析一下Handler的源码实现 Handler机制是Android系统的基础,是多线程之间切换的基础.下面我们分析一下Handler的源码实现. Handler消息机制有4个 ...
最新文章
- node mysql await_node.js中对 mysql 进行增删改查等操作和async,await处理
- lvs服务器需要开启web服务么_如何检测 Web 服务请求丢失问题
- LTE/NR用户接入过程笔记
- 阿尔法大蛋智能机器人功能_智能机器人怎么选?阿尔法蛋大蛋2.0助力孩子新学期...
- php判断与网站访问时间,织梦CMS模板用php判断某个时间段显示和隐藏内容
- 吴恩达深度学习2.3笔记_Improving Deep Neural Networks_超参数调试 和 Batch Norm
- 如何利用Pre.im分发iOS测试包
- android编程设备信息,Android获取当前手机设备信息工具类详解
- Windows 10 设定静态路由
- 相比于深度学习,传统的机器学习算法难道就此没落了吗,还有必要去学习吗?...
- 利用Apply的参数数组化来提高代码的优雅性,及高效性
- 炸裂!手摸手教你如何吃透一个 Java 项目,yyds
- Maven之(七)pom.xml配置文件详解
- visual c++ build tools下载地址
- excel表格如何转换成word表格_Word表格如何转为Excel表格?这2个小技巧轻松搞定!
- 前端框架介绍篇(小白专属)
- 服务器硬件与 Linux 初体验
- 物流人必备宝藏软件安利——Microcity
- 八皇后问题动态演示_Qt5实现
- 【Java】使用smtp和pop3协议,实现邮件收发
热门文章
- wpf每隔一小时_包河区徐河排涝站24小时不间断运作 11座区管泵站全面应战保安澜...
- android 调用js怎么获取返回值_js 函数
- java 移动支付接口开发,移动支付平台间接口报文解析技术核心架构实现、及平台交易处理项目全程实录教程...
- php前面有人排队,PHP实现打印类(实现队列排队打印)
- 17、计算机图形学——辐射度量学
- C++对象模型2——编译器生成构造函数的几种情况
- C++ 之new和delete释放内存
- stm32单片机屏幕一直闪_stm32实现LED灯的闪烁
- Windows Server 2008自定义任务栏和开始菜单
- 基于nginx的正向代理实现