2

我试图了解 Android System Server 中的活动启动。当我们使用语句 startActivity(intent); 时的流程是什么?在我们的代码中,活动的 onCreate() 被执行。我知道 onCreate() 之后的流程。

Android的框架端发生了一些事情,是什么?

4

2 回答 2

4

点击事件被翻译成 startActivity(intent) 调用,该调用通过 Binder IPC 路由到 ActivityManagerService 中的 startActivity(intent) 调用。ActvityManagerService 采取了一些措施 -

  • 第一步是收集有关意图对象的目标的信息。这是通过使用.PackageManager.MATCH_DEFAULT_ONLYresolveIntent()方法完成的,PackageManager object并且默认使用 PackageManager.GET_SHARED_LIBRARY_FILES 标志。
  • 目标信息被保存回意图对象以避免重新执行此步骤。
  • 下一个重要步骤是检查用户是否有足够的权限来调用意图的目标组件。这是通过调用grantUriPermissionLocked()方法来完成的。
  • 如果用户有足够的权限,ActivityManagerService检查目标活动是否需要在新任务中启动。任务创建取决于 Intent 标志,FLAG_ACTIVITY_NEW_TASK例如FLAG_ACTIVITY_CLEAR_TOP.
  • 现在,是时候检查ProcessRecord进程是否已经存在了。
  • 如果不存在记录,我们创建一个新的流程记录。文件 Process.java 主要负责在 Zygote 中派生一个调用,该调用返回一个新的进程 ID。
  • 在这一切完成之后,最终的本地方法被调用,该方法又调用活动的 onCreate 方法。

希望这能解决您的疑问。

于 2013-10-21T09:38:48.480 回答
0

对于“确切的流程”,请参阅公开可用的来源。您可以将源附加到您的 IDE,以便您可以在平台中调试步骤。或者您可以浏览 GitHub 上的源代码

具体来说,要了解如何Activity.onCreate()调用,看看android.app.Instrumentation它的callActivityOnCreate()方法。

于 2013-10-18T09:18:52.057 回答