Android APK资源加载流程,flutter下载功能

本文深入探讨Android APK资源加载过程,从ActivityThread#handleBindApplication开始,详细讲解了Application、ContextImpl、Resources的创建。同时提及了Flutter的下载功能。
摘要由CSDN通过智能技术生成
  • zygote进程fork出新的子进程,即App进程

  • 然后进入ActivityThread.main方法中,这时运行在App进程中,通过ActivityManagerServiceBinder IPC的形式向system_server进程发起attachApplication请求

  • system_server接收到请求后,进行一些列准备工作后,再通过Binder IPC向App进程发送scheduleLaunchActivity请求

  • App进程binder线程(ApplicationThread)收到请求后,通过Handler向主线程发送LAUNCH_ACTIVITY消息

  • 主线程收到Message后,通过反射机制创建目标Ac

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

浏览器打开:qq.cn.hn/FTe 免费领取

tivity,并回调Activity的onCreate

首先我们看第四步,attachApplication方法,最终会调用thread#bindApplication然后调用ActivityThread#handleBindApplication方法,我们从这个方法开始看

ActivityThread#handleBindApplication

private void handleBindApplication(AppBindData data) {

final InstrumentationInfo ii;

// 创建 mInstrumentation 实例

if (ii != null) {

final ApplicationInfo instrApp = new ApplicationInfo();

ii.copyTo(instrApp);

instrApp.initForUser(UserHandle.myUserId());

final LoadedApk pi = getPackageInfo(instrApp, data.compatInfo,

appContext.getClassLoader(), false, true, false);

final ContextImpl instrContext = ContextImpl.createAppContext(this, pi);

try {

final ClassLoader cl = instrContext.getClassLoader();

mInstrumentation = (Instrumentation)

cl.loadClass(data.instrumentationName.getClassName()).newInstance();

} catch (Exception e) {

}

} else {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值