图文浅析APK程序运行的过程

简介:

概述

APK程序运行过程有别于FrameWork底层启动过程,它们是倆码事,本文将以图文方式总结一下APK启动的过程,主要分为一下部分

【1】基本概念

【2】APK过程


1 、新的知识点

【1】什么是UI线程与Thread线程区别

UI线程并不陌生,但是这玩意到底是啥,与普通线程Thread有啥区别呢?

什么是UI线程:

ActivityTread类所在的线程即为UI线程,负责用户交互,处理用户消息绘制界面等

区别:

UI线程的ActivityTread中的Main方法已经使用Looper.prepareMainLooper为该线程添加了Looper对象,即已经为该线程创建了消息队列MQ,而普通线程Thread只是一个裸线程而已(可以联想一下AsyncTask将普通线程变为LOOP线程的过程)

【2】Framework概述

主要包含3大部分,其服务器,客户端,Linux驱动,其中他们对应的核心类需要了解,否则APK过程分析起来就会一头雾水

核心类介绍如下

特别是DECORVIEW,在客户端程序中首先处理消息的就是DecorView


2 APK程序运行过程

首先从ActivityThread的Main()——>ActivityThread——>UILoop循环处理(绿色部分),但是在每一步背后都有详细的过程如下图黄色部分,过程

(1)首先ActivityThread的Main()执行,调用调用prepareMainLooper()为UI线程创建消息队列(MessageQueue),

(2)然后创建一个ActivityThread对象,期间会创建俩个对象Handler(处理消息队列),ApplicationThread(Binder)对象(接收远程Ams的IPC调用)

(3)UI主线程调用Looper.loop()进入消息循环体,当接收到Ams发送start某个Activity后将会创建指定的Activity对象,Actvity又会依次创建创建PhoneWindow类,DécorView类,创建View/ViewGroup

(4)最后调用WindowManager类(创建好的界面显示到屏幕)

最后顺便提下,Android的事件派发机制和Windows的消息派发机制挺像的,其实这是一种典型的消息“冒泡”机制,消息最先到 达最底层View(DecorView),然后它先进行判断是不是它所需要的,否则就将消息传递给它的子View,这样一来,消息就从水底的气泡一样向上浮了一点距离,以此类 推,气泡达到顶部和空气接触,破了(消息被处理了),当然也有气泡浮出到顶层了,还没破(消息无人处理),这个消息将由系统来处理,对于Android来 说,会由Activity来处理。



转载:http://blog.csdn.net/xsf50717/article/details/47214173

目录
相关文章
|
存储 安全 小程序
apk安装包EXE,mis程序打包后报毒的正确处理方式-千万不要再人傻钱多被骗-真正的合法途径的处理方式才是正确的-apk安装包EXE,mis程序如何处理-优雅草央千澈
apk安装包EXE,mis程序打包后报毒的正确处理方式-千万不要再人傻钱多被骗-真正的合法途径的处理方式才是正确的-apk安装包EXE,mis程序如何处理-优雅草央千澈
454 32
apk安装包EXE,mis程序打包后报毒的正确处理方式-千万不要再人傻钱多被骗-真正的合法途径的处理方式才是正确的-apk安装包EXE,mis程序如何处理-优雅草央千澈
|
Java 编译器 开发工具
MissingPropertyException apk过大,打包后在apk出现不相关资源文件 另一个程序正在使用此文件 进程无法访问 NDK can not
MissingPropertyException apk过大,打包后在apk出现不相关资源文件 另一个程序正在使用此文件 进程无法访问 NDK can not
MissingPropertyException apk过大,打包后在apk出现不相关资源文件 另一个程序正在使用此文件 进程无法访问 NDK can not
|
XML API Android开发
获取正在前台运行的apk 包名
获取正在前台运行的apk 包名
807 5
|
安全 Android开发 虚拟化
【Android 插件化】使用 PluginKiller 帮助应用开发者规避发布的 APK 安装包被作为插件的风险 ( 验证应用是否运行在插件化引擎中 )
【Android 插件化】使用 PluginKiller 帮助应用开发者规避发布的 APK 安装包被作为插件的风险 ( 验证应用是否运行在插件化引擎中 )
383 0
|
Android开发
【Android 逆向】GDA 逆向工具安装 ( GDA 下载 | GDA 简介 | 运行 GDA 分析 APK 文件 )
【Android 逆向】GDA 逆向工具安装 ( GDA 下载 | GDA 简介 | 运行 GDA 分析 APK 文件 )
1474 0
【Android 逆向】GDA 逆向工具安装 ( GDA 下载 | GDA 简介 | 运行 GDA 分析 APK 文件 )
|
安全 Java 开发工具
【错误记录】Google Play 上架报错 ( 您上传的 APK 没有经过 Zipalign 处理,请对 APK 运行 Zipalign 工具,然后重新上传。)
【错误记录】Google Play 上架报错 ( 您上传的 APK 没有经过 Zipalign 处理,请对 APK 运行 Zipalign 工具,然后重新上传。)
285 0
【错误记录】Google Play 上架报错 ( 您上传的 APK 没有经过 Zipalign 处理,请对 APK 运行 Zipalign 工具,然后重新上传。)
|
Android开发
【错误记录】Tinker 热修复示例运行报错 ( patch receive fail: /storage/emulated/0/patch_signed_7zip.apk, code: -2)
【错误记录】Tinker 热修复示例运行报错 ( patch receive fail: /storage/emulated/0/patch_signed_7zip.apk, code: -2)
712 0
【错误记录】Tinker 热修复示例运行报错 ( patch receive fail: /storage/emulated/0/patch_signed_7zip.apk, code: -2)
|
Android开发
Android插件化开发之运行未安装apk的activity(2)
Android插件化开发之运行未安装apk的activity(2)
273 0
Android插件化开发之运行未安装apk的activity(2)
|
Android开发
Android插件化开发之运行未安装apk的activity(1)
Android插件化开发之运行未安装apk的activity(1)
472 0
Android插件化开发之运行未安装apk的activity(1)
|
安全 虚拟化 Android开发
【Android 插件化】静态分析应用 APK 安装包是否使用了插件化引擎 ( 虚拟化引擎运行特点 | 恶意软件特点 )
【Android 插件化】静态分析应用 APK 安装包是否使用了插件化引擎 ( 虚拟化引擎运行特点 | 恶意软件特点 )
305 0