从技术层面讲,如果要启动一个安卓app,首先需要触发启动过程,然后再分配系统资源,最后才启动要打开的app组件。本文我来对安卓系统app启动流程进行分析,对于应用开发、系统定制以及性能优化人员来说,熟悉应用启动流程会使你们在今后的工作中更加得心应手,做到知其然,知其所以然。在对安卓app启动流程分析过程中,必定是需要用到监测工具的,我推荐大家使用友盟+U-APM这款app性能监测工具,它的后台对于异常的查询速度是非常快的,使用起来非常方便。
启动App流程
用户点击Home上的一个App图标, 启动一个应用时:
Click事件会调用startActivity(Intent), 会通过Binder IPC机制, 最终调用到ActivityManagerService。 该Service会执行如下操作:
●第一步通过PackageManager的resolveIntent()收集这个intent对象的指向信息。
●指向信息被存储在一个intent对象中。
●下面重要的一步是通过grantUriPermissionLocked()方法来验证用户是否有足够的权限去调用该intent对象指向的Activity。
●如果有权限, ActivityManagerService会检查并在新的task中启动目标activity。
●现在, 是时候检查这个进程的ProcessRecord是否存在了。
如果ProcessRecord是null, ActivityManagerService会创建新的进程来实例化目标activity。