`
yidongkaifa
  • 浏览: 4059735 次
文章分类
社区版块
存档分类
最新评论

Android中关于onSaveInstanceState文档

 
阅读更多

大家在码代码的时候,每个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()之前或之后发生。

分享到:
评论

相关推荐

    Android 中 onSaveInstanceState()使用方法详解

    Android 中 onSaveInstanceState()使用方法详解 覆盖onSaveInstanceState方法,并在onCreate中检测savedInstanceState和获取保存的值 @Override protected void onSaveInstanceState(Bundle outState) { outState...

    Android代码-自动帮你完成 onSaveInstanceState 和 onRestoreInstanceState 的相关操作

    中文文档 Automatically save and restore states of Activities, Fragments and Views. No boilerplate code like onSaveInstanceState or onRestoreInstanceState any more. Getting started Just add the @...

    Android中用onSaveInstanceState保存Fragment状态的方法

    主要介绍了Android中用onSaveInstanceState保存Fragment状态的方法,onSaveInstanceState可以将数据保存在Fragment或Activity中,需要的朋友可以参考下

    Android onSaveInstanceState和onRestoreInstanceState触发的时机

    主要介绍了Android onSaveInstanceState和onRestoreInstanceState触发的时机的相关资料,需要的朋友可以参考下

    onSaveInstanceState调用的小例子

    通过这个例子描述onSaveInstanceState何时调用。非常简单的小例子。

    onSaveInstanceState保存数据demo

    切换横竖屏,如何保存数据

    Android相机 解决三星bug版本

    最近在Android项目中使用拍照功能 , 其它型号的手机运行成功了 唯独在三星的相机上遇到了bug . BUG具体体现为 : (1) 摄像头拍照后图片数据不一定能返回 ; onActivityResult的data为空 (2) 三星的camera强制切换到...

    Android-教程精华-开发

    Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之 中,Activity具有自己的生命周期(由系统控制生命周期,程序无法改变,但可 以用onSaveInstanceState保存其状态)。 对于Activity,关键是其...

    Android代码-svc

    Easy and intuitive pattern library for Android Why SVC? MVP and MVVM use Fragment or Activity as "VIew" So when we write code inside the Fragment or Activity, codes are getting mixed with "View" code...

    Android开发笔记

    该文档介绍了我在android studio开发中使用的一些常用和实用的技术,包括intent 广播机制,runOnUiThread,AlertDialog显示自定义布局文件问题,横竖屏切换保存状态onSaveInstanceState

    Android 代码分析

    26.1.6. 调用CameraService BBinder对象中的transact函数: 89 26.2 设计一个多客户端的Service 90 26.3 总结 91 27 多媒体架构 92 27.1 OpenCore 参数 92 27.2 Open Core介绍 93 27.3 Open Core 框架图 93 27.4 ...

    Android实现数据存储技术

    SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的...

    Android代码-icicle

    protected void onSaveInstanceState(Bundle outState) { outState.putString(AWESOME_STRING, mAwesomeString); outState.putInt(AWESOME_INT, mAwesomeInt); super.onSaveInstanceState(outState); } And then ...

    实例探究Android开发中Fragment状态的保存与恢复方法

    我们都知道,类似 Activity, Fragment 有 onSaveInstanceState() 回调用来保存状态。 在Fragment里面,利用onSaveInstanceState保存数据,并可在onActivityCreated里面恢复数据。 public void onActivityCreated...

    Node.js-一个框架可以自动生成OnSaveInstanceState代码

    android 内存被回收是一个开发者的常见问题。当我们跳转到一个二级界面,或者切换到后台的时候,如果时间过长或者手机的内存不足,当我们再返回这个界面的时候,activity或fragment就会被内存回收。

    Android中Fragment的解析和使用详解

    Android Fragment的生命周期和Activity类似,实际可能会涉及到数据传递,onSaveInstanceState的状态保存,FragmentManager的管理和Transaction,切换的Animation。 我们首先简单的介绍一下Fragment的生命周期。 ...

    android 视频处理代码

    public class VideoActivity extends AppCompatActivity implements ... public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); isFinish = false; mRecorderView.stop(); }

Global site tag (gtag.js) - Google Analytics