onSaveInstanceState

来源:互联网 发布:光明与磊落韩寒淘宝 编辑:程序博客网 时间:2024/05/12 02:39

http://developer.android.com/reference/android/app/Activity.html#onCreate(android.os.Bundle)


Called to retrieve per-instance state froman activity before being killed so that the state can be restored in onCreate(Bundle) or onRestoreInstanceState(Bundle)(the Bundle populatedby this method will be passed to both).

在activity被杀掉之前调用保存每个实例的状态,以保证该状态可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle)中恢复(传入的Bundle 参数是由onSaveInstanceState封装好的)。

 

This method is called before an activitymay be killed so that when it comes back some time in the future it can restoreits state. For example, if activity B is launched in front of activity A, andat some point activity A is killed to reclaim resources, activity A will have achance to save the current state of its user interface via this method so thatwhen the user returns to activity A, the state of the user interface can berestored via onCreate(Bundle) or 

onRestoreInstanceState(Bundle).

这个方法在一个activity被杀死前调用,当该 activity在将来某个时刻回来时可以恢复其先前状态。例如,如果activity B启用后位于activity A的前端,在某个时刻activity A因为系统回收资源的问题要被杀掉,A通过onSaveInstanceState将有机会保存其用户界面状态,使得将来用户返回到activity A时能通过onCreate(Bundle)或者onRestoreInstanceState(Bundle)恢复界面的状态。

 

Do not confuse this method with activitylifecycle callbacks such as onPause(),which is always called when an activity is being placed in the background or onits way to destruction, or onStop() whichis called before destruction. One example of when onPause() and onStop() iscalled and not this method is when a user navigates back from activity B toactivity A: there is no need to call onSaveInstanceState(Bundle) onB because that particular instance will never be restored, so the system avoidscalling it. An example when onPause() iscalled and not onSaveInstanceState(Bundle) iswhen activity B is launched in front of activity A: the system may avoidcalling onSaveInstanceState(Bundle) onactivity A if it isn't killed during the lifetime of B since the state of theuser interface of A will stay intact.

不要将这个方法和activity生命周期的回调函数如onPause()或onStop() 搞混淆了, onPause()在activtiy被放置到后台或者自行销毁时总会被调用,onStop()在activity被销毁时被调用。当调用onPause()和onStop(),但不触发onSaveInstanceState(Bundle)的例子是当用户从activity B返回到activity A时:没有必要调用B的onSaveInstanceState(Bundle),此时的B实例永远不会被恢复,因此系统会避免调用它。当调用onPause()但不调用onSaveInstanceState(Bundle)的例子是当activity B启动并处在activity A的前端:如果在B的整个生命周期里A的用户界面状态都没有被破坏的话,系统是不会调用activity A的onSaveInstanceState(Bundle)的。


The default implementation takes care ofmost of the UI per-instance state for you by calling onSaveInstanceState() oneach view in the hierarchy that has an id, and by saving the id of thecurrently focused view (all of which is restored by the default implementationof onRestoreInstanceState(Bundle)).If you override this method to save additional information not captured by eachindividual view, you will likely want to call through to the defaultimplementation, otherwise be prepared to save all of the state of each viewyourself.

默认的实现负责了大部分UI实例状态(的保存),采用的方式是调用UI层上每个拥有id的view的onSaveInstanceState() ,并且保存当前获得焦点的view的id(所有保存的状态信息都会在默认的onRestoreInstanceState(Bundle)实现中恢复)。如果你覆写这个方法来保存额外的没有被各个view保存的信息,你可能想要在默认实现过程中调用或者自己保存每个视图的所有状态。

 

If called, this method will occurbefore onStop().There are no guarantees about whether it will occur before or after onPause().

如果被调用,这个方法会在onStop()前被触发,但系统并不保证是否在onPause()之前或者之后触发。

原创粉丝点击