android中activity的声明周期

本文详细介绍了Android Activity的三种状态和七种生命周期方法,并通过实例演示了Activity的运作流程。此外,还分享了一些关于如何利用Activity生命周期进行数据传递和数据库操作的经验。

Activity的生命周期简介

1、Activity有三种状态:

 

  • 激活或者运行状态,运行在前台(在当前Activity栈的栈顶)。
  • 暂停状态,失去了焦点但是仍然对用户可见,比如有其他的Activity在它之上,或者透明或者没有遮住整个屏幕。
  • 停止状态,被其他Activity覆盖,需要注意的是包括暂停状态在内,这两种状态都仍然保存了所有状态信息,直到被系统终止。

 

 

2、操纵生命周期的七种方法:

 

方法描述是否可被杀死下一个操作
onCreate()初始化,创建views,绑定list的数据等等onStart()
onRestart()在Activity被停止后调用onStart()
onStart()在Activity被用户可见之前调用onResume() 或者 onStop()
onResume()在Activity和用户交互之前调用(快速,持久化)onPause()
onPause()在系统要激活另一个Activity时调用(快速)onResume() 或者 onStop()
onStop()在Activity不再可见时调用onRestart() 或者 onDestroy()
onDestroy()在Activity被销毁时调用

 

3、Activity的运作流程

  • 一般启动Activity:onCreate -> onStart -> onResume
  • 呼叫另一个Activity: onPause -> onCreate -> onStart -> onResume -> onStop
  • 还原Activity: onPause -> onRestart -> onStart -> onResume -> onStop -> onDestroy
  • 退出Activity: onPause -> onStop -> onDestroy
  • 回收再启动Activity: onCreate -> onStart -> onResume

4、作者经验

  • 许多人尤其是初学者都认为Activity的生命周期并不重要,只要onCreate了就ok,实际则不然,当你需要在多个Activity之间切换的时候生命周期的作用就展现了出来,尤其是在Activity之间进行数据传递或者对数据库操作的时候。
  • onResume和onRestart的作用有些相似,很多人对此感到困惑或者难以区分。不过由上面的Activity的运作流程可以看出每一个流程中几乎都存在onResume,而且是在onStart之后,所以有时候将一些必要的操作放在onResume中比放在onRestart中要好。
Android 系统中,TaskView 是一个用于显示最近任务的界面,它允许用户在多个任务之间进行切换。每个任务通常由一个或多个 Activity 组成,并以堆栈(back stack)的形式进行管理。当用户通过 TaskView 切换任务时,相关的 Activity 生命周期会受到相应的影响。 当用户通过 TaskView 选择一个任务时,该任务的前台 Activity 会经历从后台到前台的切换过程。如果该 Activity 之前已经被创建但处于暂停或停止状态,则会依次执行 `onRestart()`、`onStart()` 和 `onResume()` 方法,使其恢复到可交互状态。此时,用户可以重新与该 Activity 进行交互。在 `onResume()` 被调用后,Activity 进入运行状态,但此时界面可能尚未完全可见,真正的可见时间点是在 `onWindowFocusChanged()` 被调用时[^2]。 如果用户在 TaskView 中选择了一个新的任务,并且该任务的根 Activity 尚未创建,则会触发该 Activity 的完整生命周期流程:`onCreate()` → `onStart()` → `onResume()`。这个过程与首次启动 Activity 时的生命周期流程一致。需要注意的是,即使 Activity 已经存在于任务堆栈中,但如果它被系统销毁以释放资源,则再次启动时也会重新执行 `onCreate()`。 当用户离开当前任务并切换到其他应用或返回主屏幕时,当前任务的前台 Activity 会依次执行 `onPause()`、`onStop()`,甚至可能被系统销毁以节省资源。如果用户之后再次通过 TaskView 返回该任务,系统可能会重新创建该 Activity 或从后台恢复它,具体取决于系统资源状况和任务的配置。 此外,在 TaskView 中切换任务时,还可能涉及到多窗口模式下的生命周期变化。在多窗口模式下,Activity 可能不会完全进入前台或后台,而是部分可见或完全不可见,这取决于用户的操作和设备的显示模式。此时,Activity 的生命周期方法如 `onStart()` 和 `onStop()` 可能会被多次调用,以反映其可见性状态的变化。 为了确保应用在 TaskView 中切换时能够提供流畅的用户体验,开发者需要特别关注 Activity 生命周期中的关键点,尤其是在 `onResume()` 和 `onPause()` 方法中处理 UI 更新和资源释放。同时,考虑到 `onWindowFocusChanged()` 是 Activity 真正变得可见并可以与用户交互的时间点,任何依赖于界面可见性的逻辑都应在此方法中实现。 ```java @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { // 执行与界面可见相关的初始化操作 } } ``` 通过合理利用 Activity 生命周期方法,开发者可以确保应用在 TaskView 中切换时能够正确地管理资源、更新界面,并提供一致的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值