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

1.2、Activity的状态保存

并且系统调用onRestoreInstanceState()的时机,是在onStart()之后,onResume之前。...Activity状态保存的默认机制 然而,即使我们不重写onSaveInstanceState()方法,Activity对于onSaveInstanceState()方法的默认实现,仍然会帮我们恢复某些状态...(state); } 几乎Android框架中的每一个widget都适当的实现了这个方法,这样任何可见的UI更改活动在重新创建时自动保存和恢复。...尽管系统帮我们实现了UI组建的自动保存和恢复,但是有时候也需要去保存和恢复一些其他的成员变量。...在这种情况下,记得重写onSaveInstanceState()和onRestoreInstanceState()方法是,记得带上super方法的实现,因为那里就是系统UI组件自动保存和恢复的默认实现。

86330

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

Activity状态保存的默认机制 然而,即使我们不重写onSaveInstanceState()方法,Activity对于onSaveInstanceState()方法的默认实现,仍然会帮我们恢复某些状态...框架中的每一个widget都适当的实现了这个方法,这样任何可见的UI更改活动在重新创建时自动保存和恢复。...尽管系统帮我们实现了UI组建的自动保存和恢复,但是有时候也需要去保存和恢复一些其他的成员变量。...在这种情况下,记得重写onSaveInstanceState()和onRestoreInstanceState()方法是,记得带上super方法的实现,因为那里就是系统UI组件自动保存和恢复的默认实现。...也即是key-value模式了 因为在android的设计中中,这个函数的主要的作用是用来保存UI状态的,现在怎么去保存一些自己的数据呢 保存: @Override public void onSaveInstanceState

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

    安卓activity生命周期_请描述activity的生命周期

    在这种情况下,你可以实现onSaveInstanceState回调方法对有关 Activity 状态的信息进行保存,以确保有关 Activity 状态的重要信息得到保留。...--> test 总结:注意:onSaveInstanceState的调用时序在onStop之前,但是和onPause 的调用时序就不一定了,有可能在onPause之前或者之后。...又因为无法保证系统会调用onSaveInstanceState(存在不需要保存状态的情况,例如用户使用“返回”按钮离开您的 Activity 时,因为用户的行为是在显式关闭 Activity),因此您只应利用它来记录...因此,用户在 Activity 内所做的任何更改都会得到保留,这样一来,当 Activity 返回前台(当它“继续”)时,这些更改仍然存在,所以,即使您什么都不做,也不实现onSaveInstanceState...,Activity类的 onSaveInstanceState默认实现也会恢复部分 Activity 状态。

    57410

    唠唠 Activity 的生命周期

    由于这是一张 2014 年的图,注意 onRestoreInstanceState() 和 onSaveInstanceState() 的调用时机会因为 SDK 版本的不同稍有变化,文章后面也会提到。...在 onStart() 方法中,Activity 对用户可见,应用准备进入前台和用户交互。我对这句 Activity 对用户可见 其实抱有很大的疑问。...异常情况下终止的 Activity,系统会调用 onSaveInstanceState() 方法来保存当前 Activity 的状态。那么哪些状态默认会被保存呢?...只要是实现了 onSaveInstanceState()方法的 View,都会被保存下来。...所以一般建议直接在 onRestoreInstanceState 方法中进行状态恢复即可。 对于非 UI 状态的其他数据,就得自己手动进行保存和恢复了。

    38620

    Activity生命周期-你真的了解吗?

    调用onStop方法做后续处理。 调用onDestroy方法销毁当前活动。 重新onCreate该活动。 调用onStart方法之后,再调用onRestoreInstance方法加载保存的数据。...这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。...在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行。...至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的,onRestoreInstanceState...另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,你也可以选择在onCreate方法中做数据还原。

    1K20

    【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析

    状态的时候, 会将要保存的数据使用键值对的形式 保存在 Bundle 对象中; -- 恢复数据 : 在 Activity 的 onCreate()方法 创建 Activity 的时候会传入一个 Bundle...; -- 调用时机不固定 : 该方法一定是在 onStop() 方法之前调用, 但是不确定是在 onPause() 方法之前 还是 之后调用; -- 布局中组件状态存储 : 每个组件都 实现了 onSaveInstance...() 方法, 在调用函数的时候, 会自动保存组件的状态, 注意, 只有有 id 的组件才会保存; -- 关于默认的 super.onSaveInstanceState(outState) : 该默认的方法是实现...组件状态保存的; (3) onRestoreInstanceState(Bundle savedInstanceState) 方法 方法回调时机 : 在 Activity 被系统销毁之后 恢复 Activity...恢复的时候也会通过参数传递到 onCreate() 方法中; -- 位于生命周期位置吧 : 该方法在 onResume() 方法之前保存信息;  二 代码示例 Activity 主要代码 :  package

    40720

    Fragment 重叠 遮盖问题 完美解决

    1.导致Fragment 重叠 和遮盖的原因  主要还是因为Fragment的状态保存机制,当系统内存不足时,Fragment的主Activity被回收,Fragment的实例并没有随之被回收。...3.onSaveInstanceState()与onRestoreInstanceState()这两个方法。...原本以为只有在系统因为内存回收Activity时才会调用的onSaveInstanceState(),居然在转跳到其他Activity、打开多任务窗口、使用Home回到主屏幕这些操作中也被调用,然而onRestoreInstanceState...而且我在onResume()发现之前的Fragment只是被移除,并不是空,所以就算你在onResume()中执行问题一中创建的Fragment的方法,同样无济于事。...其实到这里大家也就明白了,就是因为这句话导致了重影的出现,于是我删除了这句话,然后onCreate()与onRestoreInstanceState()中同时使用问题一中的创建Fragment方法,然后再通过保存切换的状态

    1.3K20

    onSaveInstanceState和onRestoreInstanceState详解

    在activity被杀掉之前调用保存每个实例的状态,以保证该状态可以在 onCreate(Bundle)或者onRestoreInstanceState(Bundle) (传入的Bundle参数是由onSaveInstanceState...在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState()一定会被执行,且也一定会执行onRestoreInstanceState...四. onSaveInstanceState()方法的默认实现    如果我们没有覆写onSaveInstanceState()方法, 此方法的默认实现会自动保存activity中的某些状态数据, 比如...android应用框架中定义的几乎所有UI控件都恰当的实现了 onSaveInstanceState()方法,因此当activity被摧毁和重建时, 这些UI控件会自动保存和恢复状态数据....是否需要重写onSaveInstanceState()方法   既然该方法的默认实现可以自动的保存UI控件的状态数据, 那什么时候需要覆写该方法呢?

    2.2K50

    activity生命周期有几种状态_activity生命周期七种方法

    大家好,又见面了,我是你们的朋友全栈君。...() Activity中onSaveInstanceState()和onRestoreInstanceState() onSaveInstanceState(Bundle outState):...但是不确定是在 onPause() 方法之前 还是 之后调用; 布局中组件状态存储 : 每个组件都 实现了 onSaveInstance() 方法, 在调用函数的时候, 会自动保存组件的状态, 注意..., 只有有 id 的组件才会保存; 关于默认的 super.onSaveInstanceState(outState) : 该默认的方法是实现 组件状态保存的; onRestoreInstanceState..., 就不需要调用; – Bundle 对象传递 : 该方法保存的 Bundle 对象在 Activity 恢复的时候也会通过参数传递到 onCreate() 方法中; activity的进程优先级

    1.2K10

    onSaveInstanceState() 和 onRestoreInstanceState()方法

    Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法, 它们不同于 onCreate()、onPause()等生命周期方法...在activity被杀掉之前调用保存每个实例的状态,以保证该状态可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle) (传入的Bundle参数是由onSaveInstanceState...这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。...在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行 总而言之,onSaveInstanceState...至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的,(本人注:我昨晚调试时就发现原来不一定成对被调用的

    44130

    Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

    当然了,应对这种情况,Android给出了几种方案: a、如果是少量数据,可以通过onSaveInstanceState()和onRestoreInstanceState()进行保存与恢复。...Android会在销毁你的Activity之前调用onSaveInstanceState()方法,于是,你可以在此方法中存储关于应用状态的数据。...这里,如果在异步数据完成加载之后,旋转屏幕,使用上述a、b两种方法都不会很难,无非是保存数据和恢复数据。...在运行时配置发生变化时,在Fragment中保存有状态的对象 a) 继承Fragment,声明引用指向你的有状态的对象 b) 当Fragment创建时调用setRetainInstance(boolean...首先说一下探索过程: 起初,我认为此时旋转无非是再启动一次线程,并不会造成异常,我只要即使的在onDestroy里面关闭上一个异步任务就可以了。

    2.1K20

    不需要再手写 onSaveInstanceState 了,因为你的时间非常值钱

    如果你是一个有经验的 Android 程序员,那么你肯定手写过许多 onSaveInstanceState 以及 onRestoreInstanceState 方法用来保持 Activity 的状态,因为...Google 推荐的最佳实践 onSaveInstanceState 方法会提供给我们一个 Bundle 对象用来保存我们想保存的值,但是 Bundle 存储是基于 key - value 这样一个形式...(savedInstanceState); } 保存完状态之后,为了能在系统重新实例化这个 Activity 的时候恢复先前被系统杀死前的状态,我们在 onCreate 方法里把原来保存的值重新取出来:...当然,恢复这个操作也可以在 onRestoreInstanceState 这个方法实现: public void onRestoreInstanceState(Bundle savedInstanceState...但是并不优雅,为了保持变量的值,引入了两个方法 ( onSaveInstanceState 和 onRestoreInstanceState ) 和两个常量 ( 为了存储两个变量而定义的两个常量,仅仅为了放到

    34310

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

    阅读本文可了解 Activity如何保存临时数据 & 状态 Activity如何恢复临时数据 & 状态 Activity如何保存临时数据 & 状态 1....activity重新创建的时候自动的恢复(只有在为该UI提供了唯一ID后才起作用) 若需复写该方法从而存储额外的状态信息时,应先调用父类的onSaveInstanceState()(因为默认的onSaveInstanceState...()帮助UI存储它的状态) 只使用该方法记录Activity的瞬间状态(UI的状态),而不是去存储持久化数据,因为onSaveInstanceState()调用时机不确定性;可使用 onPause...方法中,可选择在onCreate()中做数据还原 至此,关于Activity的临时数据 & 状态 保存 & 恢复,讲解完毕。...下一篇文章我将对讲解Android 的相关知识。

    3.1K30

    Android入门教程之Activity(生命周期,启动...)

    因此,您不应使用 onPause() 来保存应用或用户数据、进行网络调用,或执行数据库事务。因为在该方法完成之前,此类工作可能无法完成。 已进入已停止状态,因此系统将调用 onStop() 回调。...当异常终止的 Activity 被重建时,会调用 onRestoreInstanceState 方法(该方法在 onStart 之后),并且把 Activity 销毁时 onSaveInstanceState...保存的 Bundle 对象参数同时传递给 onCreate 方法和onRestoreInstanceState 方法。...方法中传入的 Bundle 对象是销毁时 onSaveInstanceState 保存的,onRestoreIntanceState 在 onStart之后。...onSaveInstanceState() 只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。 8. 谈谈横竖屏切换过程中调用的函数 要切记这里活动已经被销毁了。

    1.1K00

    Android后台杀死系列之一:FragmentActivity及PhoneWindow后台杀死处理机制

    ,这样才能保证重建流程,并且,Fragment的子类也不推荐有带参数的构造方法,最好采用setArguments来保存参数。...为什么出现两个DialogFragment Fragment在被创建之后,如果不通过add或者replace添加到Activity的布局中是不会显示的,在保存现场的时候,也是保存了add的这个状态的,来看一下...Activity都是可能被后台杀死的,比如,在开发者选项中打开不保留活动,就会达到这种效果,在启动另一个Activity时,上一个Activity的保存流程大概如下,这里先简单描述,在下一篇原理篇的时候...OnRestoreInstanceState的调用时机 之前已经说过,OnRestoreInstanceState虽然与onSaveInstanceState是配对实现的,但是其调用却并非完全成对的,在...可以看出,OnRestoreInstanceState的调用时机是在onStart之后,在onPostCreate之前。

    3.1K30

    Activity的生命周期

    (3)onStart() 表示Activity正在被启动 即将开始 这是Activity已经可见 但还没出现在前台 还无法与用户交互 (4)onResume 表示Activity已经可见了 并出现在前台并已经开始活动...onCreate和onDestroy是配对的 分别标识着Activity的创建和销毁并只可能有一次调用 从Activity的是否可见来说onStart和onStop是配对的随着用户的操作或者设备的屏幕点亮和熄灭这两个方法可能被调用多次...onStop onDestroy均会被调用 用于Activity被异常终止的 系统会调用onSaveInstanceState保存当前Activity状态 在重新创建后系统会调用onRestoreInstanceState...并把Activity销毁时onSaveInstanceState方法保存的Bundle对象作为参数同时传递给onRestoreInstanceState和onCreate onSaveInstanceState...在onStop之前调用 和onPause没有时序的关系 onRestoreInstanceState在onStart之后调用 情况2资源内存不足导致低优先级的Activity被杀死 数据存储和恢复过程和情况

    31920

    Activity详解(二)——异常情况下的生命周期分析

    来保存当前Activity的状态。...当系统重建的时候会调用onRestoreInstanceState这个方法,并且把Activity销毁时onSaveInstanceState方法所保存的Bundle对象作为参数同时传递给onRestoreInstanceState...和onCreate方法,因为我们可以通过onCreate和onRestoreInstanceState方法来判断Activity是否被重建了,如果被重建了,那么我们就可以取出之前保存的数据并恢复,从上图我们可以看出...,onRestoreInstanceState的调用时机是在onStart之后。...这里可以简单地这么理解,系统只在Activity异常终止的时候才会调用onSaveInstanceState和onRestoreInstanceState来存储和恢复数据,其他情况不会触发这个过程。

    1.8K40

    Android 应用保存状态

    最先找到的文档就是通过 Activity 的 onSaveInstanceState 和 onRestoreInstanceState 方法来保存用户状态, 虽然最终测试发现这种方法不是肯靠谱, 还是记录下来了...onRestoreInstanceState 恢复状态 当系统重新回到以前被系统回收的应用时, 会调用 onRestoreInstanceState 方法, 如果之前用 onSaveInstanceState...保存了状态, 则可以通过重写 onRestoreInstanceState 方法恢复状态。...= null) { /* retain ui state */ } } 也可以在 onRestoreInstanceState 方法中读取保存的状态, 代码如下: protected...对于 Fragment 来说, 可以在 onCreate 、 onActivityCreated 、 onCreateView 中读取 onSaveInstanceState 方法中保存的状态, 这三个方法分别如下

    92720

    Android基础总结(2)——活动Activity

    当然,增加category种类之后,响应该Intent的组件也必须同时满足action和多个category的标签。...我们也可以通过其他构造函数,指定uri或setData()方法设置uri的方法来实现隐式Intent的功能。...(因为并不是每一个活动都会布满屏幕,例如Toast等出现时,前一个活动就是暂停状态),该状态下的活动仍然是完全存活的,系统也不愿意去回收 停止状态:当一个活动不再处于栈顶位置,并且完全不可见时,系统愿意为这种活动保存相应的状态和变量...onSaveInstanceState是用来保存UI状态的,你可以使用它保存你所想保存的东西,在Activity杀死之前,它一般在onStop或者onPause之前触发,onRestoreInstanceState...Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法

    1.2K90
    领券