【笔记】Android App 运行的过程

2017-01-23  本文已影响61人  莫威權在B612等着那温柔的风

Android Application Launch

ActivityManagerService 源码

Android 不同的地方

文档描述

  1. 每个 Android app 都运行在自己的进程里面,并且有唯一的 user ID
  2. Android app 都具有不同的 部件 , 这些 部件 都能被其它的 App 唤醒,特别它们都没有统一的入口,如 main() 函数

App 的 部件 有以下四类:

Application Launch process

app launch summary.jpg

startActivity()ActivityManagerService 会通过 Binder IPC 执行以下步骤启动 Activity

  1. 收集信息,intent 的 目标对象,这会由 PackageManagerresolveIntent() 完成,PackageManager.MATCH_DEFAULT_ONLY and PackageManager.GET_SHARED_LIBRARY_FILES flags 是默认设置
  2. 目标对象信息存储好,防止再做同样动作
  3. 检查是否有权限启动 目标对象 ,用 grantUriPermissionLocked ()
  4. 如果有权限,ActivityManagerService 会检查是否需要将 目标 Activity 启动在新的 task 里,这取决于 Intent 上的标记,譬如:FLAG_ACTIVITY_NEW_TASK, FLAG_ACTIVITY_CLEAR_TOP 等等
  5. 检查 ProcessRecord 是否存在 process

进程启动的几个阶段

  1. 进程的创造 (Process Creation)
  2. 绑定 App (Binding Applicaiton)
  3. Launching Activity / Starting Service 等等的步骤

推荐阅读资料:

下面这篇治资料,谈述编译和运行的,浅谈的

运行的步骤简介,不错的文章

下面这篇文章的调查也很不错,写了 Zygote 和一些运行的底层

上一篇 下一篇

猜你喜欢

热点阅读