Android UI程序启动流程(AMS/PMS)

115 阅读2分钟

当启动一个app,会先加载ActivityThread类的main方法,来开辟一个主线程ActivityThread,里面构造一个Looper.prepareMainLooper(),方法最后会调用Looper.loop()方法。

结合之前的handle学习,主looper需要进行阻塞住,当界面没有任何事件过来主线程就会堵塞在那里,来消息了才会再次运行。

Instrumentation用于管理Activity生命周期;

ApplicationThread:作为一个通信类,专门负责ActivityThread和AMS之间的通信。属于是ActivityThread为AMS提供的N个回调函数;

PMS管理的是清单文件;

image

重整体过程中我们可以整理一下几点:

1.Lunch进程会将清单文件中相关配置信息传递数据入AMS;

2.AMS负责的管理配置信息;

3.Activity启动后会生产一个ApplicationThread通信类对于AMS进行通信

4.AMS接收到attach调用后,将相关配置信息筛选、打包后交由事物管理进行回调,事物管理会回调ApplicationThread中的相关schudle函数进行通信;

5.所有的具体数据构建的反射构建由Instrumentation完成;

AMS、PMS是系统存在的,当手机关机就不存在了;

PMS:管理清单文件;

AMS/PMS到底是什么作用?

PMS用于包管理、包解析、结果缓存、接口查询,是运行在手机开机的时候;

PMS中有包缓存集合,解析出这些包,然后通过这些包找到各自对应的activityInfo信息,activityInfo中有ActivityName等信息,可以利用反射构建成Activity界面,Activity生命周期需要管理,ActivityThread进行缓存管理(一个应用对应一个ActivityThread,充当AMS的缓存中心);

AMS用于Activity的生命周期管理,是在需要进行Activity跳转的时候;

hook AMS实现集中式登录,登录的时候通过跳转的时候进行hook,判断是否跳转登录,然而代码中只写startActivity跳转,其他内部操作由hook技术实现

hook技术的弊端:有兼容性,系统源码会不一样,hook方式也不一样。

hook必须是静态变量,非静态的是不能hook的;


刷新率:表示一秒屏幕刷新的速度,一般是60HZ;

帧速率:表示GPU在一秒内绘画出来多少画面,如:30FPS/60FPS;

如果刷新率高于帧速率:会出现画面黑屏,刷新的速度过快导致画面没有那么多,中间会出现黑画面表示没有图展示;

如果帧速率高于刷新率:也就是每秒的绘画速度会高于每秒看到的画面速度,就会导致出现跳屏,比如游戏画面会一下到另外的场景;

转载作者:双囍_小赵 链接:www.jianshu.com/p/19ce56f34…