【问题标题】:How is onCreate() called after startActivity() in android? What is the exact flow between it?在android中的startActivity()之后如何调用onCreate()?它之间的具体流程是什么?
【发布时间】:2013-10-27 00:25:41
【问题描述】:

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

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

【问题讨论】:

  • 您到底想知道什么?如果你真的想知道到底发生了什么,你可以通读源代码。如果您有一些具体问题,请提出。
  • @DavidWasser:正确-但确实需要一个起点:)

标签: android function frameworks android-activity flow


【解决方案1】:

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

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

希望这能解决您的问题。

【讨论】:

    【解决方案2】:

    对于“确切的流程”,请查看公开可用的来源。您可以attach sources to your IDE 以便您可以调试步入平台。或者你可以例如browse the sources on GitHub.

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多