关于Activity的onSaveInstanceState调用时机的说明
Activity的生命周期里并没有提到onSaveInstanceState的触发,这个函数提供了为我们在某些情况下保存Activity信息的机会,但需要注意的是这个函数不是什么时候都会被调用的,官方文档解释的比较清楚,特此
翻译一下。
原文出处:android-sdk-windows-1.5_r3/docs/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)
protected void onSaveInstanceState (Bundle outState)
Called to retrieve per-instance state from an activity before being killed so that the state can be restored in onCreate(Bundle) or onRestoreInstanceState(Bundle) (the Bundle populated by this method will be passed to both). This method is called before an activity may be killed so that when it comes back some time in the future it can restore its state. For example, if activity B is launched in front of activity A, and at some point activity A is killed to reclaim resources, activity A will have a chance to save the current state of its user interface via this method so that when the user returns to activity A, the state of the user interface can be restored via onCreate(Bundle) or onRestoreInstanceState(Bundle).
在activity被杀掉之前调用保存每个实例的状态,以保证该状态可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle) (传入的Bundle参数是由onSaveInstanceState封装好的)中恢复。这个方法在一个activity被杀死前调用,当该activity在将来某个时刻回来时可以恢复其先前状态。例如,如果activity B启用后位于activity A的前端,在某个时刻activity A因为系统回收资源的问题要被杀掉,A通过onSaveInstanceState将有机会保存其用户界面状态,使得将来用户返回到activity A时能通过onCreate(Bundle)或者onRestoreInstanceState(Bundle)恢复界面的状态。
Do not confuse this method with activity lifecycle callbacks such as onPause(), which is always called when an activity is being placed in the background or on its way to destruction, or onStop() which is called before destruction. One example of when onPause() and onStop() is called and not this method is when a user navigates back from activity B to activity A: there is no need to call onSaveInstanceState(Bundle) on B because that particular instance will never be restored, so the system avoids calling it. An example when onPause() is called and not onSaveInstanceState(Bundle) is when activity B is launched in front of activity A: the system may avoid calling onSaveInstanceState(Bundle) on activity A if it isn't killed during the lifetime of B since the state of the user interface of A will stay intact.
不要将这个方法和activity生命周期回调如onPause()或onStop()搞混淆了,onPause()在activtiy被放置到背景或者自行销毁时总会被调用,onStop()在activity被销毁时被调用。一个会调用onPause()和onStop(),但不触发onSaveInstanceState的例子是当用户从activity B返回到activity A时:没有必要调用B的onSaveInstanceState(Bundle),此时的B实例永远不会被恢复,因此系统会避免调用它。一个调用onPause()但不调用onSaveInstanceState的例子是当activity B启动并处在activity A的前端:如果在B的整个生命周期里A的用户界面状态都没有被破坏的话,系统是不会调用activity A的onSaveInstanceState(Bundle)的。
The default implementation takes care of most of the UI per-instance state for you by calling onSaveInstanceState() on each view in the hierarchy that has an id, and by saving the id of the currently focused view (all of which is restored by the default implementation of onRestoreInstanceState(Bundle)). If you override this method to save additional information not captured by each individual view, you will likely want to call through to the default implementation, otherwise be prepared to save all of the state of each view yourself. If called, this method will occur before onStop(). There are no guarantees about whether it will occur before or after onPause().
默认的实现负责了大部分UI实例状态(的保存),采用的方式是调用UI层上每个拥有id的view的onSaveInstanceState() ,并且保存当前获得焦点的view的id(所有保存的状态信息都会在默认的onRestoreInstanceState(Bundle)实现中恢复)。如果你覆写这个方法来保存额外的没有被各个view保存的信息,你可能想要在默认实现过程中调用或者自己保存每个视图的所有状态。如果被调用,这个方法会在onStop()前被触发,但系统并不保证是否在onPause()之前或者之后触发。
分享到:
相关推荐
Android onSaveInstanceState和onRestoreInstanceState触发的时机 Android 中的 onSaveInstanceState 和 onRestoreInstanceState 是两个重要的生命周期方法,它们在 Activity 的生命周期中扮演着关键角色。了解这...
### Android深入理解Activity #### Activity概述 在Android应用程序开发中,`Activity`是四大组件之一,主要用于呈现用户界面。每一个Activity都可以视为一个单独的屏幕,它承载着与用户交互的各种功能。通过理解...
### Android Activity 的详细讲解 #### 一、Activity的生命周期 在Android开发中,`Activity`是最为核心的概念之一,它是构成Android应用的基本单元。一个应用程序通常包含多个Activity,每个Activity负责显示用户...
本文将深入解析Android Activity的生命週期,并通过详细说明每个阶段的功能与作用,帮助开发者更好地理解和控制Activity的状态变化。 ### Activity生命週期概述 Activity的生命週期是指从创建到销毁的一系列状态...
理解这些方法的调用时机和目的,对于正确管理Activity的状态和用户体验至关重要。 此外,开发者还可以通过重写`onConfigurationChanged()`来处理设备配置改变(如屏幕方向切换)时Activity的生命周期变化,以及使用...
理解每个状态的意义和调用时机,以及如何在这些方法中进行适当的资源管理,是编写高效和响应迅速应用的基础。 2. **Intent和Intent Filter**:Intent是Android中用于启动Activity或Service、传递数据的对象。理解...
开发者需要熟练掌握各个生命周期方法的调用时机,以及如何在这些方法中恰当地处理业务逻辑,以提供流畅的用户体验。同时,灵活运用启动模式和回退栈机制,可以优化应用的导航结构,提高用户体验。
在实际开发中,开发者需要关注这些状态的转换,特别是在`onSaveInstanceState()`和`onRestoreInstanceState()`中保存和恢复Activity的状态,以防意外的配置更改导致Activity被销毁和重建。 此外,了解Activity的...
此外,还应注意,Android系统可能会根据需要在不同的生命周期状态之间进行切换,如当设备屏幕旋转时,系统会调用onSaveInstanceState()保存当前状态,然后销毁并重建Activity。开发者可以通过重写...
在Android应用开发中,Activity是用户界面的基本组件,它负责展示屏幕上的交互内容。这篇笔记主要探讨了Activity的生命周期,这是每个Android开发者都需要深入理解的关键概念。Activity的生命周期包括了一系列的状态...
为了实现Activity状态的保存与恢复,Android提供了两种主要方法:`onSaveInstanceState()`和`onRestoreInstanceState()`。 1. **onSaveInstanceState()**: - 当Activity被销毁前(如切换到后台、屏幕旋转等),...
5. **onSaveInstanceState()的作用及调用时机**: onSaveInstanceState()用于保存Activity的状态,当系统需要销毁Activity(如屏幕旋转或系统内存紧张)时,会调用此方法。保存的数据通常存储在Bundle对象中,以便...
- `onSaveInstanceState()`: 当Activity由于内存不足等原因需要被销毁时,在其被销毁之前调用此方法来保存实例状态。该方法返回一个Bundle对象,用于保存Activity的状态数据。 示例流程:`onSaveInstanceState()` ...
Android中的Activity生命周期是每个Android开发者必须深入理解和掌握的关键概念。Activity是Android应用程序的基本构建块,它代表用户界面的一个屏幕。了解其生命周期对于优化应用性能、处理资源管理以及确保正确...
Activity是Android应用开发中的核心组件之一,它负责与用户交互并展示UI。了解Activity的生命周期是每个Android开发者必备的基础知识。Activity的生命周期是由系统管理的,主要包括创建、启动、运行、暂停、停止以及...
- 当Activity需要暂时隐藏,如启动全屏视频播放,会调用`onSaveInstanceState(Bundle outState)`,在此保存UI的状态,以防Activity被销毁后重建。 了解Activity生命周期是Android开发的基础,开发者需要合理地管理...
Activity是Android应用开发中的核心组件之一,它负责与用户交互并展示UI。理解Activity的生命周期是每个Android开发者必备的基础知识。在这个"Activity生命周期Demo"中,我们将深入探讨Activity如何启动、运行、暂停...