简述Android中Activity的启动(onCreate方法的调用)

本文简要介绍了Android应用程序的启动流程,从ActivityThread的main方法开始,经过ActivityManagerService的attachApplication系列方法,最终到Activity的onCreate调用。通过这个过程,我们了解到Activity启动涉及的关键步骤和类,包括ActivityThread、ActivityManagerService、ActivityStackSupervisor等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先写在前边,这是第一次写博客

写过Java程序的人都知道,每一个Java都有一个main方法作为程序的入口,所以在Android应用程序上也存在一个这样的main方法,一个Android的应用程序都有一个MainActiviy,也许很多人认为主Activity就是一个程序的入口,但实际上真正的入口在AcivityThread类中。

本篇不会详细介绍整个Activity启动过程中的详细函数方法或者其逻辑,只是简单的梳理其过程中的相关类和关键的方法。

ActivityThread–>main
ActivityThread类中main方法就是一个应用程序的主入口,当启动一个应用,会先由Zygote进程孵化出新的进程后,会执行AcivityThread的main方法。在main方法中的关键是ActivityThread的attach方法将其绑定到ActivityManagerService中。

ActivityThread–>attach
在att

### AndroidActivity 的生命周期方法及其调用时序 在 Android 开发中,Activity 是应用程序的核心组件之一,其生命周期由多个回调方法组成。这些方法定义了 Activity 不同状态下的行为以及它们的触发条件。 #### 1. 生命周期的主要方法 以下是 Activity 生命周期中的主要方法及其作用: - **`onCreate()`**: 当 Activity 首次创建时调用。在此方法中通常初始化必要的组件并设置布局[^3]。 - **`onStart()`**: 表明 Activity 即将变得可见给用户。此时,Activity 还未完全准备好与用户交互。 - **`onResume()`**: 此时 Activity 已经处于前台,并能够接收用户的输入事件。这是 Activity 可见且可操作的状态[^2]。 - **`onPause()`**: 当另一个 Activity 获得焦点或者当前 Activity 将要被隐藏时调用。此方法用于保存重要数据或停止动画等资源消耗的操作。 - **`onStop()`**: 如果 Activity 对用户不再可见,则会调用 `onStop()` 方法。这可能是因为一个新的全屏 Activity启动或者其他原因导致当前 Activity 完全不可见。 - **`onRestart()`**: 当重新进入已经停止的 Activity 前会被调用。它会在 `onStart()` 方法之前执行。 - **`onDestroy()`**: 在销毁 Activity 实例前调用。这是一个释放所有资源的好机会。 #### 2. 生命周期的关键阶段 根据上述方法,可以划分出几个重要的生命周期阶段: - **Visible Lifetime (可见生命周期)**: 从 `onStart()` 到 `onStop()`,表示 Activity 处于对用户可见的状态。 - **Foreground Lifetime (前台生命周期)**: 从 `onResume()` 到 `onPause()`,表示 Activity 处于前台并与用户交互的状态。 #### 3. 示例场景分析 假设有一个 Activity A 启动了一个新的 Activity B,那么两者的生命周期调用顺序如下所示: ```plaintext ActivityB.onPause() ActivityA.onCreate() ActivityA.onStart() ActivityA.onResume() ActivityB.onStop() ``` 这种情况下,Activity B 的暂停 (`onPause`) 和停止 (`onStop`) 发生在其失去焦点之后,而新启动Activity A 经历完整的启动过程[^1]。 #### 4. 特殊情况说明 如果在同一应用内部存在 Fragment 并与其关联的 Activity 共存,需要注意的是两者之间并非独立运行而是相互交织完成各自的生命周期。例如,Fragment 的某些生命周期方法可能会早于或晚于对应的 Activity 方法被执行[^4]。 ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 设置视图 } @Override protected void onStart() { super.onStart(); Log.d("Lifecycle", "Activity started"); } @Override protected void onResume() { super.onResume(); Log.d("Lifecycle", "Activity resumed and ready to interact with user."); } ``` 以上代码片段展示了如何通过重写生命周期方法来记录日志以便调试和理解具体的行为变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值