Activitythread笔记

本文详细解析了Android中Activity从创建到启动的全过程,包括进程启动、ActivityThread的bindApplication、Instrumentation创建、ContextImpl绑定、DecorView创建及setContentView过程,以及启动Activity时的跨进程调用机制。

//activity的创建过程

进程启动------->activitythread.main()------------>activitythread.bindApplication()------------->创建了Instrumentation(调用了classloader创建了Instrumentation)--------->在ActivityThread中调用了Instrumentation.newActivity(调用了Classloader创建activity)------------》

 

//contextimpl的创建过程和activity的绑定过程

Activitythread创建contextimpl------------------》调用activity.attach------------------>把contextimpl赋值给activity的父类ContextWrapper的mbase对象,并且创建了PhoneWindow对象

 

//DecorView的创建

在setContentView中创建了DecorView对象,之后创建了ViewRootImpl对象,调用了ViewRootImpl的setView方法,在setView中调用了mWindowSession.addToDisplay,通过跨进程调用到了wms的addWindow方法

wms创建WindowState 检查token操作,并且添加到了windowMap队列中。

 

//activity.startActivity过程

activity.startactivity----------->调用mbase.startactivity(相当于调用contextimpl.startActivity)------------->调用Instrumentation.execStartActivity----------------->ActivityManagerNative.startActivity----------->调用到了ams

### 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、付费专栏及课程。

余额充值