@ActivityThread和ApplicationThread
ActivityThread和ApplicationThread
个人总结,原文地址:https://blog.csdn.net/qq_37196748/article/details/106478134
1.ActivityThread:主线程、UI线程,程序的入口(main函数),不是线程是运行在主线程中的一个对象。
2.ApplicationThread是ActivityThread和AMS交互的中间桥梁。
3.ApplicationThread 和ActivityThread之间的联系是通过Handler,ActivityThread的变量final H mH = new H(); 私有内部类H继承自Handler,是主线程的handler,处理一些消息事务。
4.关于ApplicationThread:
是ActivityThread的私有变量,也是一个Binder对象,ApplicationThread是Client端的Binder,里面有操作scheduleXX方法处理四大组件的生命周期方法,所以AMS(AMS是Android系统最为核心的服务之一,其职责包括四大核心组件与进程的管理)服务想要调用启动组件,那就必须持有ApplicationThread的实例,如调用ApplicationThread的scheduleLaunchActivity方法,最后在scheduleLaunchActivity方法中sendMessage方法发送消息,ActivityThread中处理消息。
5.简述Activity的启动:
分为两种根Activity和普通Activity,根Ay设计进程的创建。
首先Launcher进程向AMS请求创建根Activity,AMS会判断根Activity所需的应用程序进程是否存在并启动,如果不存在就会请求Zygote进程创建应用程序进程。应用程序进程启动后,AMS会请求应用程序进程创建并启动根Activity。
普通的Activity启动:
在应用程序进程中的Activity向AMS请求创建普通Activity(步骤1),AMS会对 这个Activty的生命周期管和栈进行管理,校验(AndroidManifest.xml注册文件声明、启动权限)Activity等等。如果Activity满足AMS的校验,(判断进程存在)AMS就会请求应用程序进程中的ActivityThread去创建并启动普通Activity。