您的位置:首页 > 移动开发 > Android开发

Android中关于onSaveInstanceState文档

2013-05-31 08:40 393 查看
大家在码代码的时候,每个activity肯定是会调用onCreate方法的,但是onCreate方法中的savedInstanceState这个参数却很少用到,经常就这么被忽略了,从其命名来看,应该是用来保存activity状态的,而这些状态数据是从何而来呢?就是自己这回要学习的onSaveInstanceState方法,没有什么资料比官方文档更准确详细的了,以下是来自http://developer.android.com/reference/android/app/Activity.html中有关onSavedInstanceState方法的翻译,记录学习一下该方法的使用。

protected void onSaveInstanceState (Bundle outState)

Added in API level 1

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).

在一个activity被杀掉之前调用来保存每一个实例的状态,这样一来该状态便可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle) 中恢复。

------------------------------------------------------------------------------

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即将被杀掉之前调用,以便于在将来某一时刻返回时可以恢复到其原来的状态。比如,如果activityB启动后位于activityA的前面,并且在某一时刻activityA由于系统回收资源要被杀掉,A就可以通过该方法将有机会保存其用户界面的状态,这样,以后当用户返回到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()在activity被放置后台或者自行销毁时被调用,onStop()是activity被销毁时调用。有这样一个说明什么时候onPause和onStop被调用而不是onSaveInstanceState被调用的例子就是当用户从activityB返回到activityA的时候:没有必要调用B的onSaveInstanceState(Bundle)因为此时的B的实例永远不会被恢复,所以系统会避免调用它。另一个调用onPause()而不是调用onSaveInstanceState()的例子是当activityB启动并处于activityA的前端:如果在B的生命周期里A的界面用户状态未被破话,系统就不会调用activityA
的onSaveInstanceState(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.

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

------------------------------------------------------------------------------

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

如果被调用,该方法会在onStop()之前发生。但并不保证是否在onPause()之前或之后发生。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: