Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法, 它们不同于 onCreate()、onPause()等生命周期方法...当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。...通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。...onSaveInstanceState方法会在什么时候被执行,有这么几种情况: 1、当用户按下HOME键时。...在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行 总而言之,onSaveInstanceState
(ps:关于原理实现请追寻源码,就是view的保存与绘制) 二. onSaveInstanceState的调用时机 当某个activity变得“容易”被系统销毁时,该activity的onSaveInstanceState...总而言之,onSaveInstanceState()的调用遵循一个重要原则,即当系统存在“未经你许可”时销毁了我们的activity的 可能时,则onSaveInstanceState()会被系统调用,...四. onSaveInstanceState()方法的默认实现 如果我们没有覆写onSaveInstanceState()方法, 此方法的默认实现会自动保存activity中的某些状态数据, 比如...由上所述, 如果我们需要覆写onSaveInstanceState()方法, 一般会在第一行代码中调用该方法的默认实现:super.onSaveInstanceState(outState)。 五....如果需要保存额外的数据时, 就需要覆写onSaveInstanceState()方法。
Android 中 onSaveInstanceState()使用方法详解 覆盖onSaveInstanceState方法,并在onCreate中检测savedInstanceState和获取保存的值...@Override protected void onSaveInstanceState(Bundle outState) { outState.putInt("currentposition...", videoView.getCurrentPosition()); super.onSaveInstanceState(outState); } public void onCreate(
核心方法 onSaveInstanceState() 2. 调用时机 当系统 未经你许可 时,可能 销毁了你的Activity,则会被系统调用 。...具体调用场景 假定为Activity A显示在当前Activity栈的最上层时,以下情况会执行onSaveInstanceState() 注:系统不知道你切换到其他地方后要运行多少其他的程序,自然也不知...Activity A是否会被销毁,故系统会调用onSaveInstanceState(),下面所说的所有情况该遵循这原则 ?...super.onSaveInstanceState(savedInstanceState); } 补充说明: 布局每1个View默认实现:onSaveInstanceState(),即UI的任何改变都会自动的存储和在...activity重新创建的时候自动的恢复(只有在为该UI提供了唯一ID后才起作用) 若需复写该方法从而存储额外的状态信息时,应先调用父类的onSaveInstanceState()(因为默认的onSaveInstanceState
先看Application Fundamentals上的一段话: Android calls onSaveInstanceState() before the activity becomes vulnerable...通过重写一个activity的所有生命周期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我们可以清楚地知道当某个activity(假定为...activity A)显示在当前task的最上层时,其onSaveInstanceState方法会在什么时候被执行,有这么几种情况: 1、当用户按下HOME键时。...这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。...在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行 总而言之,onSaveInstanceState
(Bundle outState) { super.onSaveInstanceState(outState); } } 2....onCreate(Bundle savedInstanceState) 方法 Activity 创建时回调 : 该方法会自动传入一个 Bundle 对象, 该 Bundle 对象就是上次被系统销毁时在 onSaveInstanceState...(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("octopus", "www.octopus.org.cn..."); System.out.println("onSaveInstanceState() : save date www.octopus.org.cn"); } } 运行结果 : 在运行的过程中...旋转屏幕; I/System.out( 8167): onSaveInstanceState() : save date www.octopus.org.cn I/System.out( 8167):
ViewModel 是 onSaveInstanceState 的替代品吗? 简而言之,不是, 但是他们不无关联,请继续读。...这些也是很好的例子说明了 onSaveInstanceState() 方法中存储的数据的类型。onSaveInstanceState() 不是被设计来存储类似 bitmap 这样的大的数据的。...这听起来没有 onSaveInstanceState() 涵盖了配置更改和进程关闭两种情况那么有用。...如果你的 activity 行为如此,你可以不使用 onSaveInstanceState() 而在本地持久化所有数据。...onSaveInstanceState() 并不适用于那些需要长时间序列化/反序列化的数据。
如果你是一个有经验的 Android 程序员,那么你肯定手写过许多 onSaveInstanceState 以及 onRestoreInstanceState 方法用来保持 Activity 的状态,因为...重写 Activity 中的 onSaveInstanceState 方法 是 Google 推荐的用来保持 Activity 状态的做法。...Google 推荐的最佳实践 onSaveInstanceState 方法会提供给我们一个 Bundle 对象用来保存我们想保存的值,但是 Bundle 存储是基于 key - value 这样一个形式...@Overridepublic void onSaveInstanceState(Bundle savedInstanceState) { // Save the user's current game...但是并不优雅,为了保持变量的值,引入了两个方法 ( onSaveInstanceState 和 onRestoreInstanceState ) 和两个常量 ( 为了存储两个变量而定义的两个常量,仅仅为了放到
为了避免此种情况的发生, 开发者可以覆写onSaveInstanceState()方法. onSaveInstanceState()方法接受一个Bundle类型的参数, 开发者可以将状态数据存储到这个Bundle...onSaveInstanceState()方法的默认实现 如果开发者没有覆写onSaveInstanceState()方法, 此方法的默认实现会自动保存activity中的某些状态数据, 比如activity...由上所述, 如果开发者需要覆写onSaveInstanceState()方法, 一般会在第一行代码中调用该方法的默认实现: super.onSaveInstanceState(outState)....如果需要保存额外的数据时, 就需要覆写onSaveInstanceState()方法....如需要保存类中成员变量的值(见上例). onSaveInstanceState()方法适合保存什么数据 由于onSaveInstanceState()方法方法不一定会被调用, 因此不适合在该方法中保存持久化数据
在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行 总而言之,onSaveInstanceState...原来onSaveInstanceState()的主要目的是保存activity的状态有关的数据,当系统在杀死activity时,如果它希望activity下次出现的样子跟现在完全一样,那么它就调用这个onSaveInstanceState...所以要明白这一点:onSaveInstanceState()并不是永远都会调用。...原来activity类已实现了onSaveInstanceState(),在onSaveInstanceState()的默认实现中,会调用所有控件的相关方法,把控件们的状态都保存下来,比如EditText...对了,别忘了在你的实现中调用父类的onSaveInstanceState()。
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState...注意:并不是每一次Activity销毁,系统都回去回调onSaveInstanceState()方法,我们是我们自己finish掉该Activity,那么onSaveInstanceState()方法就不会被调用...并且系统调用onSaveInstanceState()方法的时机一般是在onStop()之前,但是也有可能是onPause之前。...Activity状态保存的默认机制 然而,即使我们不重写onSaveInstanceState()方法,Activity对于onSaveInstanceState()方法的默认实现,仍然会帮我们恢复某些状态...具体来说,默认的实现会帮我们调用该Activity布局中每个View的onSaveInstanceState()方法。
outState) { super.onSaveInstanceState(outState); Log.d("roamer", "onSaveInstanceState"); ...,那么onSaveInstanceState()方法就不会被调用。...Activity状态保存的默认机制 然而,即使我们不重写onSaveInstanceState()方法,Activity对于onSaveInstanceState()方法的默认实现,仍然会帮我们恢复某些状态...activity的状态保存,我们最主要的问题有三点: 1.onSaveInstanceState这个方法什么时候被执行,因为他不是必须的,不是activity生命周期中必须的流程 onSaveInstanceState...()这些方法中去 这样来看onSaveInstanceState()的作用就是: onSaveInstanceState() 适合的是当前Activity或者Fragment一旦被系统自己销毁,应用还能在这之前保存一些必要的数据
当activity实例在后台时, 系统在回收资源时很可能回收掉Activity, 并在onSaveInstanceState函数里保存fragment的状态, 再次打开该Activity时, 在onCreate...nc.fragments : null); } mFragments.dispatchCreate(); } protected void onSaveInstanceState...(Bundle outState) { super.onSaveInstanceState(outState); Parcelable p = mFragments.saveAllState...= null) { outState.putParcelable(FRAGMENTS_TAG, p); } } 从源码可以看出解决方案: 1、 覆盖onSaveInstanceState...(Bundle outState) { //super.onSaveInstanceState(outState); //注释掉该方法, 即不保存状态 } 以上就是
Activity,并把各个生命周期打印出来 2、运行Activity,得到如下信息 onCreate--> onStart--> onResume--> 3、按crtl+f12切换成横屏时 onSaveInstanceState...onCreate--> onStart--> onRestoreInstanceState--> onResume--> 4、再按crtl+f12切换成竖屏时,发现打印了两次相同的log onSaveInstanceState...onPause--> onStop--> onDestroy--> onCreate--> onStart--> onRestoreInstanceState--> onResume--> onSaveInstanceState...> onStart--> onRestoreInstanceState--> onResume--> 6、再执行步骤4,发现不会再打印相同信息,但多打印了一行onConfigChanged onSaveInstanceState...Activity的生命周期 补充一点,当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变 Activity运行时按下HOME键(跟被完全覆盖是一样的):onSaveInstanceState
1.在MainActivity中覆写onSaveInstanceState()方法 //一个活动被系统回收会调用onSaveInstanceState() //下一次活动重新启动时就可以从onCreate...@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState
最先找到的文档就是通过 Activity 的 onSaveInstanceState 和 onRestoreInstanceState 方法来保存用户状态, 虽然最终测试发现这种方法不是肯靠谱, 还是记录下来了...onSaveInstanceState 保存状态 当系统销毁 Android 程序, 进行内存回收时, 会调用 Activity 的 onSaveInstanceState 方法, 传入一个 Bundle...实例参数, 通过重写这个方法, 可以保存 Activity 的状态, 示例代码如下: protected override void OnSaveInstanceState(Bundle outState...) { base.OnSaveInstanceState(outState); outState.PutInt("main_activity_click_count", _count);...onRestoreInstanceState 恢复状态 当系统重新回到以前被系统回收的应用时, 会调用 onRestoreInstanceState 方法, 如果之前用 onSaveInstanceState
(Bundle outState) { // TODO Auto-generated method stub Log.i("FiveActivity", "onSaveInstanceState..."); super.onSaveInstanceState(outState); } } 第一种情况: 按set按钮,并且按get按钮 当然了,这时候按back按钮,当再次进入后...,会发现输入框里没有内容,同时按get得到为0.0 同时第一种情况中我的打印Log.i("FiveActivity", "onSaveInstanceState");始终也是没有打印 接着第二种情况:...2: 对于第二种情况,EditText中的文字存在那是因为Android系统中几乎对所以的UI都实现了OnSaveInstanceState方法,这是默认的实现。...("1234", value); super.onSaveInstanceState(outState); } 这样的话,当杀死进程后,再次进来我们的数据就会正常的出现。
在Activity销毁的时候先通过onSaveInstanceState的Bundle参数里面,存储一些内容,然后在重建时候调用onRestoreInstanceState方法传递刚才那个Bundle,...(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("data", "...横屏 我们知道在重写onSaveInstanceState和onRestoreInstanceState的时候,默认代码是这样的: @Override protected void onSaveInstanceState...简单来说:super.onSaveInstanceState(outState);它会帮我们保存Activity的相关视图,然后分别调用每个View的onSaveInstanceState方法,比如EditText...所以我们如果想知道某一个具体的View系统能自动帮我们恢复哪些数据,我们可以查看这个View的onSaveInstanceState和onRestoreInstanceState代码(比如ListView
领取专属 10元无门槛券
手把手带您无忧上云