首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

onSaveInstanceState() 和 onRestoreInstanceState()方法

Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法, 它们不同于 onCreate()、onPause()等生命周期方法...当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。...通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。...onSaveInstanceState方法会在什么时候被执行,有这么几种情况: 1、当用户按下HOME键时。...在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行 总而言之,onSaveInstanceState

43430

onSaveInstanceState和onRestoreInstanceState详解

(ps:关于原理实现请追寻源码,就是view的保存与绘制) 二. onSaveInstanceState的调用时机 当某个activity变得“容易”被系统销毁时,该activity的onSaveInstanceState...总而言之,onSaveInstanceState()的调用遵循一个重要原则,即当系统存在“未经你许可”时销毁了我们的activity的 可能时,则onSaveInstanceState()会被系统调用,...四. onSaveInstanceState()方法的默认实现    如果我们没有覆写onSaveInstanceState()方法, 此方法的默认实现会自动保存activity中的某些状态数据, 比如...由上所述, 如果我们需要覆写onSaveInstanceState()方法, 一般会在第一行代码中调用该方法的默认实现:super.onSaveInstanceState(outState)。 五....如果需要保存额外的数据时, 就需要覆写onSaveInstanceState()方法。

2.2K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    onSaveInstanceState和onRestoreInstanceState触发的时机

    先看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

    70570

    Android:保存 & 恢复Activity 状态缓存 - onSaveInstanceState()、onRestoreInstanceState()

    核心方法 onSaveInstanceState() 2. 调用时机 当系统 未经你许可 时,可能 销毁了你的Activity,则会被系统调用 。...具体调用场景 假定为Activity A显示在当前Activity栈的最上层时,以下情况会执行onSaveInstanceState() 注:系统不知道你切换到其他地方后要运行多少其他的程序,自然也不知...Activity A是否会被销毁,故系统会调用onSaveInstanceState(),下面所说的所有情况该遵循这原则 ?...super.onSaveInstanceState(savedInstanceState); } 补充说明: 布局每1个View默认实现:onSaveInstanceState(),即UI的任何改变都会自动的存储和在...activity重新创建的时候自动的恢复(只有在为该UI提供了唯一ID后才起作用) 若需复写该方法从而存储额外的状态信息时,应先调用父类的onSaveInstanceState()(因为默认的onSaveInstanceState

    3.1K30

    android之activity中onSaveInstanceState和onRestoreInstanceState触发时机

    先看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

    30020

    不需要再手写 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 ) 和两个常量 ( 为了存储两个变量而定义的两个常量,仅仅为了放到

    34010

    保存数据返回后可以继续编辑

    为了避免此种情况的发生, 开发者可以覆写onSaveInstanceState()方法. onSaveInstanceState()方法接受一个Bundle类型的参数, 开发者可以将状态数据存储到这个Bundle...onSaveInstanceState()方法的默认实现 如果开发者没有覆写onSaveInstanceState()方法, 此方法的默认实现会自动保存activity中的某些状态数据, 比如activity...由上所述, 如果开发者需要覆写onSaveInstanceState()方法, 一般会在第一行代码中调用该方法的默认实现: super.onSaveInstanceState(outState)....如果需要保存额外的数据时, 就需要覆写onSaveInstanceState()方法....如需要保存类中成员变量的值(见上例). onSaveInstanceState()方法适合保存什么数据 由于onSaveInstanceState()方法方法不一定会被调用, 因此不适合在该方法中保存持久化数据

    815100

    Android编程实现状态保存的方法分析

    在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行 总而言之,onSaveInstanceState...原来onSaveInstanceState()的主要目的是保存activity的状态有关的数据,当系统在杀死activity时,如果它希望activity下次出现的样子跟现在完全一样,那么它就调用这个onSaveInstanceState...所以要明白这一点:onSaveInstanceState()并不是永远都会调用。...原来activity类已实现了onSaveInstanceState(),在onSaveInstanceState()的默认实现中,会调用所有控件的相关方法,把控件们的状态都保存下来,比如EditText...对了,别忘了在你的实现中调用父类的onSaveInstanceState()。

    66431

    Android基础部分再学习---activity的状态保存

    outState) {   super.onSaveInstanceState(outState);       Log.d("roamer", "onSaveInstanceState");  ...,那么onSaveInstanceState()方法就不会被调用。...Activity状态保存的默认机制 然而,即使我们不重写onSaveInstanceState()方法,Activity对于onSaveInstanceState()方法的默认实现,仍然会帮我们恢复某些状态...activity的状态保存,我们最主要的问题有三点: 1.onSaveInstanceState这个方法什么时候被执行,因为他不是必须的,不是activity生命周期中必须的流程 onSaveInstanceState...()这些方法中去 这样来看onSaveInstanceState()的作用就是: onSaveInstanceState()  适合的是当前Activity或者Fragment一旦被系统自己销毁,应用还能在这之前保存一些必要的数据

    1K20

    android横竖屏切换activity生命周期变化

    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.2K80

    Android 应用保存状态

    最先找到的文档就是通过 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

    91420

    Android 四大组件学习之Activity六

    (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); } 这样的话,当杀死进程后,再次进来我们的数据就会正常的出现。

    28710

    Android技能树 — Activity小结

    在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

    50210
    领券