android - android中startActivity()之后如何调用onCreate()?它之间的具体流程是什么?

标签 android function android-activity frameworks

我试图了解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/

相关文章:

android - App kivy连接不上mysql数据库

android - 未能将 Fabric Crashlytics 升级到 Firebase Crashlytics

c++ - 使用代码 :Blocks on Linux 的 C++ 函数中的 "Not Declared in scope"

android - 如何通过 Activity 将多个值保存到单个变量。

android - 嵌套的线性布局按钮文本在末尾被裁掉

Java Gson 从对象内的列表中反序列化选定字段

python - 我可以使用递归替换幂运算符 (**) 吗?

javascript - 是否可以将回调内的数据传递给其包装的函数?

android - 将触摸传递给下的 View

java - 抽屉列表阵列适配器使应用程序崩溃