请简述Apk的安装过程
PackageManagerService处理各种应用的安装,卸载,管理等工作,开机时由systemServer启动此服务。
安装过程:复制APK安装包到data/app目录下,解压并扫描安装包,针对Dalvik/ART环境优化dex文件,保存到dalvik-cache目录,并在data/data/packageName目录下创建对应的应用数据目录。
卸载过程:删除安装过程中在上述三个目录下创建的文件及目录
1.pms首先扫描安装“system\app”目录下的各个系统应用:scanDirLI(mSystemAppDir,PackageParser.PARSE_IS_SYSTEM, scanMode);
2.扫描“data\app”目录,即用户安装的第三方应用:scanDirLI(mAppInstallDir, 0, scanMode);
3.通过解析安装包parsePackage获取到安装包的信息结构,解析apk的Manifest.xml文件
将apk的权限,应用包名,apk安装位置等保存在/data/system/packages.xml文件中. PMS进行完成的,PMS完成后通知Launcher进程。
4.显示icon图标
- Launcher将系统中安装的程序展现在桌面上
- 这个由Launcher生成的icon中保存着默认启动的Activity的信息
请简述从点击图标开始app的启动流程?
ActivityThread启动.png1.点击app图标,Launcher进程使用Binder IPC向system_server进程的AMS发起startActivity请求;【IPC->Binder】
2.system_server进程中的AMS收到1中的请求后,AMS会通过ActivityStarter处理Intent和Flag(启动模式相关的内容),然后通过socket向zygote进程发送创建新进程的请求;【IPC->Socket】
3.zygote进程会进行孵化(虚拟机和资源的复制),然后fork出新进程
4.然后zygote进程会通过invokeDynamicMain()方法调用到ActivityThread的main方法【ActivityThread】
5.App进程通过Binder IPC向system_server进程的AMS发起attachApplication请求;
6.AMS收到5中的请求后,通过Binder ipc方式通知laucher进程暂停当前桌面Activity即执行onPause
7.然后AMS通过Binder IPC向App进程发送scheduleLauncherActivity请求;
7.App进程的ApplicationThread线程收到7的请求后,通过handler向主线程发送LAUNCHER_ACTIVITY消息;
8.主线程收到7中发送来的Message后,反射创建目标Activity,回调oncreate等方法,开始执行生命周期方法,我们就可以看到应用页面了。
9.最后AMS同通知launcher进程的activity执行onStop,launcher不可见
网友评论