我试图了解Android系统服务器中的 Activity 启动。 当我们使用startActivity(intent);语句时流程是怎样的?在我们的代码中, Activity 的 onCreate() 被执行。我知道 onCreate() 之后的流程。
Android 框架端发生了一些事情,是什么?
最佳答案
点击事件被转换为startActivity(intent)调用,该调用通过Binder IPC路由到ActivityManagerService中的startActivity(intent)调用。 ActvityManagerService 执行几个操作 -
- 第一步是收集有关 Intent 对象的目标的信息。这是通过在
PackageManager 对象
上使用resolveIntent()
方法来完成的。默认情况下使用PackageManager.MATCH_DEFAULT_ONLY 和 PackageManager.GET_SHARED_LIBRARY_FILES 标志。 - 目标信息被保存回 Intent 对象中,以避免重新执行此步骤。
- 下一个重要步骤是检查用户是否有足够的权限来调用 Intent 的目标组件。这是通过调用
grantUriPermissionLocked()
方法来完成的。 - 如果用户有足够的权限,
ActivityManagerService
将检查目标 Activity 是否需要在新任务中启动。任务创建取决于 Intent 标志(例如FLAG_ACTIVITY_NEW_TASK
)和其他标志(例如FLAG_ACTIVITY_CLEAR_TOP
)。 - 现在,是时候检查该进程的
ProcessRecord
是否已存在。 - 如果不存在记录,我们将创建一个新的流程记录。文件Process.java主要负责在Zygote中fork一个调用,返回一个新的进程id。
- 所有这些完成后,将调用最终的 native 方法,该方法又会调用 Activity 的 onCreate 方法。
希望这能解决您的疑问。
关于android - android中startActivity()之后如何调用onCreate()?它之间的具体流程是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19444928/