美文网首页
请简述Apk的安装过程&点击桌面图标app的启动流程

请简述Apk的安装过程&点击桌面图标app的启动流程

作者: ModestStorm | 来源:发表于2022-02-21 11:05 被阅读0次

    请简述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启动.png

    1.点击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不可见

    相关文章

      网友评论

          本文标题:请简述Apk的安装过程&点击桌面图标app的启动流程

          本文链接:https://www.haomeiwen.com/subject/zqqvlrtx.html