Android运行程序的主线程与AMS通讯的桥梁 ActivityThread和ApplicationThread

ActivityThread

ActivityThread是Android系统中担任治理和调度运行程序中Activity的一个关键组件。

实质与配置:

关键职责:

初始化环节:

成员变量和方法:

主线程的关键责任:

ApplicationThread

ApplicationThread是ActivityThread的外部类,是一个Binder对象。ApplicationThread作为IApplicationThread对象的server端,期待client端的恳求而后启动处置,其中最大的client就是AMS。

ApplicationThread在Android运行程序启动环节中表演着关键角色。当ActivityThread的handleBindApplication方法被调用时,会将ApplicationThread与Application对象启动绑定,作为运行程序与系统服务之间启动通讯的桥梁。handleBindApplication方法还会调用Application对象的onCreate方法,这是运行程序启动环节中的第一个回调方法。

在Activity的启动逻辑环节中,ApplicationThread的ScheduleActivity方法会经过一个叫H的Handler发送一个启动Activity的信息。ActivityThread也就是咱们常说的UI线程或主线程,是程序的入口(main函数),保留了运行中一切的对应组件(如优惠、服务和内容提供者等)。

创立根Activity:

Launcher进程向AMS恳求创立根Activity,AMS会判别根Activity所需的运行程序进程能否存在并启动,假设不存在恳求Zygote进程创立运行程序进程。运行程序进程启动后,AMS会恳求运行程序进程创立并启动根Activity。

创立个别Activity:

在运行程序进程中的Activity向AMS恳求创立个别Activity(步骤1),AMS会对这个Activty的生命周期管和栈启动治理,校验(AndroidManifest.xml注册文件申明、启动权限)Activity等等。假设Activity满足AMS的校验,(判别进程存在)AMS就会恳求运行程序进程中的ActivityThread去创立并启动个别Activity。

总结

ApplicationThread是ActivityThread的一个外部类,成功了IApplicationThread接口,是一个Binder接口,用于跨进程通讯(IPC)。ApplicationThread对象作为IApplicationThread的服务端,被AMS等系统服务经过Binder机制启动调用。

ActivityThread是Android运行程序进程的主线程,也就是咱们通常所说的UI线程。每个Android运行程序进程都有一个ActivityThread实例,担任创立和治理运行程序的组件(如Activity、Service、BroadcastReceiver等),并处置与这些组件关系的生命周期事情。

ApplicationThread和ActivityThread是严密关系的。ApplicationThread是ActivityThread的一个外部类,用于处置来自AMS的IPC调用,并将这些调用转换为对ActivityThread中相应方法的调用。AMS经过ApplicationThread与ActivityThread启动通讯,从而治理运行程序的生命周期和组件。

您可能还会对下面的文章感兴趣: