ActivityThread和ApplicationThread

@ActivityThread和ApplicationThread

ActivityThread和ApplicationThread

个人总结,原文地址:https://blog.youkuaiyun.com/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。
在这里插入图片描述

### ActivityThread in Android Framework #### 概述 `ActivityThread` 是 Android 应用程序的核心组件之一,在应用程序启动过程中扮演着重要角色。它负责管理应用进程中的各种资源服务,包括 `Activity`, `BroadcastReceiver`, `Service` 的生命周期管理。 #### 初始化过程 当一个新的应用程序被启动时,Zygote 进程会创建一个新进程并初始化 `ApplicationThread` 对象[^1]。随后,通过 Binder 机制与系统的 AMS (Activity Manager Service) 建立通信连接。AMS 负责调度协调不同进程中运行的应用组件之间的交互操作。 ```java // Application Thread Initialization Code Snippet final ApplicationThread applicationThread = new ApplicationThread(); Binder.setContextManager(applicationThread); ``` #### 主要功能 - **消息循环处理**: 使用 Looper 来实现事件分发器的功能,确保 UI 更新其他异步任务能够按顺序执行。 - **组件管理**: 控制四大组件 (`Activity`, `Service`, `ContentProvider`, `BroadcastReceiver`) 生命周期的变化,并向它们传递来自系统或其他应用的消息。 - **资源加载**: 加载配置文件、布局定义以及其他静态数据到内存中供后续使用。 #### 常见问题及解决方案 ##### ANR(Application Not Responding) 如果主线程长时间阻塞,则可能导致 ANR 错误发生。为了避免这种情况的发生,应该尽量减少在主线程上执行耗时的操作;对于不可避免的任务可以考虑将其放到子线程去完成。 ##### Context泄露 由于 `ActivityThread` 维护了一个全局上下文环境(`context`)实例,因此不当使用该对象可能会造成内存泄漏的风险。建议开发者们遵循最佳实践指南来管理释放不再使用的资源。 ##### 启动时间过长 优化应用冷启动性能可以从多个方面入手,比如提前预加载必要的类库、压缩图片大小以及采用懒加载技术等措施都可以有效缩短首次渲染所需的时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值