android从A页面跳转到B页面生命周期方法执行顺序

本文探讨了在Android应用中从一个页面(A页面)跳转到另一个页面(B页面)时,Activity生命周期方法的调用顺序。具体步骤包括:首先触发A页面的onPause方法,随后依次执行B页面的onCreate、onStart和onResume方法,使B页面变得可见且有焦点。

从上图可以看出 从A页面跳转到B页面Act的生命周期执行顺序为

首先执行 A页面的onPause方法 然后是在B页面的onCreate 方法 onStart方法

 onResume方法 此时B页面可见了并且有焦点 此时onStop A页面

### Android 中 A 界面跳转到 B 界面的生命周期变化分析 在 Android 开发中,Activity 是应用程序的核心组件之一。当从 A 界面(即 A Activity)跳转到 B 界面(即 B Activity)时,两个 Activity 都会经历一系列特定的生命周期方法调用。 #### 默认启动模式下的生命周期变化 假设 A 和 B 使用的是默认的 `standard` 启动模式,则它们的生命周期变化过程如下: 1. **A Activity 的生命周期** - 当用户触发跳转操作时,A Activity 会依次调用以下方法: - `onPause()`:表示 A 已经失去焦点但仍部分可见[^4]。 - `onStop()`:表示 A 完全不可见并停止运行[^5]。 2. **B Activity 的生命周期** - 在创建新的 B Activity 过程中,其生命周期方法按以下顺序被调用: - `onCreate(Bundle savedInstanceState)`:初始化 B 并设置布局资源[^4]。 - `onStart()`:使 B 变得可见但尚未获得焦点。 - `onResume()`:让 B 成为前台活动并接收用户的输入事件[^4]。 整个流程可以总结为: ``` A.onPause() -> B.onCreate() -> B.onStart() -> B.onResume() -> A.onStop() ``` #### 不同启动模式的影响 除了标准模式外,还有其他几种常见的启动模式会影响生命周期行为,分别是 `singleTop`, `singleTask`, 和 `singleInstance`。 - **Single Top 模式** 如果目标 Activity (这里是 B) 已存在于任务栈顶,则不会重新实例化而是直接重用现有实例,并仅调用 `onNewIntent(Intent intent)` 方法而不是完整的生命周期序列[^1]。 - **Single Task 模式** 此种情况下如果相同类型的 Activity 存在于某个任务堆栈里,则该实例会被带到前端;否则新建一个实例放入新任务栈顶部。对于源 Activity 来说它依旧遵循常规销毁逻辑(`pause-stop`)而目的端则依据实际情况决定是否重建或者仅仅更新状态数据通过 onRestart 或者 Onnewintent 实现过渡处理[^1]. - **Single Instance 模式** 类似于 Single Task ,不过这里更严格一点就是这个 activity 将成为单独的任务唯一成员 。这意味着即使来自不同应用发起请求也只会共享同一个 instance ,而且不能再有别的 component 加入进来形成复合结构[^1]. 下面给出一段简单的代码演示如何实现基本的页面转换以及监听对应阶段的变化情况: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = findViewById(R.id.button); button.setOnClickListener(v -> { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); }); } // Lifecycle methods logging example @Override protected void onPause() { Log.d("Lifecycle", "MainActivity paused"); super.onPause(); } @Override protected void onStop() { Log.d("Lifecycle", "MainActivity stopped"); super.onStop(); } ``` 同样地,在第二个活动中也需要覆盖相应的钩子函数来观察他们的执行时机点. ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值