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

通过覆盖onSaveInstanceState保存跨旋转的数据

通过覆盖onSaveInstanceState方法可以保存跨旋转的数据。当设备旋转时,Android系统会销毁当前的Activity并重新创建一个新的Activity实例。为了保持数据的持久性,可以在onSaveInstanceState方法中保存数据,并在Activity重新创建后恢复数据。

onSaveInstanceState方法是Activity生命周期中的一个回调方法,用于保存Activity的状态。它接收一个Bundle参数,可以将需要保存的数据存储在Bundle中。通常,我们可以将需要保存的数据以键值对的形式放入Bundle中。

以下是一个示例代码,演示如何使用onSaveInstanceState保存和恢复数据:

代码语言:txt
复制
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("key", "value"); // 保存数据到Bundle中
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    String value = savedInstanceState.getString("key"); // 从Bundle中恢复数据
    // 使用恢复的数据进行相应的操作
}

在上述示例中,我们将一个字符串"value"保存在Bundle中,并在Activity重新创建后从Bundle中恢复该字符串。

应用场景:

  1. 保存用户输入的表单数据,以便在设备旋转后恢复用户的输入。
  2. 保存应用程序的状态,例如当前播放的音乐、视频等。
  3. 保存临时数据,以便在Activity重新创建后继续使用。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云存储(COS):提供高可靠、低成本、安全的云存储服务,适用于各种场景下的数据存储需求。详情请参考:https://cloud.tencent.com/product/cos
  • 腾讯云数据库(TencentDB):提供多种类型的数据库服务,包括关系型数据库(MySQL、SQL Server等)和NoSQL数据库(MongoDB、Redis等)。详情请参考:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器(CVM):提供弹性、安全、高性能的云服务器,可满足各种规模的应用需求。详情请参考:https://cloud.tencent.com/product/cvm
  • 腾讯云人工智能(AI):提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等。详情请参考:https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):提供全面的物联网解决方案,包括设备接入、数据管理、应用开发等。详情请参考:https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(Mobile):提供移动应用开发的云服务,包括移动推送、移动分析、移动测试等。详情请参考:https://cloud.tencent.com/product/mobile
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

《Android编程权威指南》之UI状态保存与恢复篇

三、进程销毁时保存数据 上面讲述是发生屏幕旋转等配置更改情况下,activity会被销毁和重启,这个时候可以用viewmodel来自动保存数据与获取数据。...3.1 覆盖onSaveInstanceState(Bundle)函数 通过覆盖Activity.onSaveInstanceState(Bundle)方式,就可以解决上述问题,当应用进程在意外被系统...通常,覆盖onSaveInstanceState(Bundle)函数,在Bundle对象中,保存当前activity小或暂存状态数据覆盖onStop()函数,保存永久性数据,比如用户编辑文字等。...因此,要处理设备配置更改 加上 系统发起进程终止 两种情况,就结合使用 ViewModel 和 onSaveInstanceState() 方式来保存数据状态。...参考:https://developer.android.com/jetpack 六、深入学习:解决问题要彻底 意思就是通过禁止应用屏旋转,以此解决设备配置改变带来UI状态丢失问题方式太粗暴,也不能从根本解决问题

62110

ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

ViewModel 允许数据在例如屏幕旋转这样配置更改后依然保留。...ViewModel 被设计用来以与生命周期相关方式保存和管理 UI 相关数据。ViewModel 允许数据在例如屏幕旋转这样配置更改后依然保留。...你通过 onSaveInstanceState() bundle 将查询传入 ViewModel,这将决定它已加载了必须数据从而不需要重新查询数据库。...复杂数据通过本地持久化保存然后用 onSaveInstanceState() 来保存那些复杂数据唯一 ID。ViewModel 在数据加载后将他们保存在内存中。...在这个场景下,ViewModel 在 activity 旋转或者进入后台时仍保留数据,而单纯用 onSaveInstanceState() 并没那么容易实现。

1K20
  • 《Android编程权威指南》之Activity生命周期篇

    通常,通过覆盖 onCreate(Bundle) 方法,activity 可以预处理以下 UI 相关工作: 实例化组件并将它们放置在屏幕上(调用setContentView(int)方法); 引用已实例化组件...【 Bundle 是存储字符串键与限定类型值之间映射关系(键-值对)一种结构】 所以,可通过覆盖 onSaveInstanceState(Bundle) 方法,将一些数据保存在 bundle 中,然后在...onCreate(Bundle) 方法中取回这些数据,解决旋转问题。...在 Bundle 中保存定制类对象不是个好主意,因为你取回对象可能已经没用了。比较好做法是,通过其他方式保存定制类对象,而在Bundle中保存标识对象基本类型数据。...} 为了解决旋转问题,所以是否回答过问题数组也要保持下来,定义一个KEY,再在 onSaveInstanceState() 保存数组 private const val KEY_QUESTION_ANSWERED

    62810

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

    当然了,应对这种情况,Android给出了几种方案: a、如果是少量数据,可以通过onSaveInstanceState()和onRestoreInstanceState()进行保存与恢复。...这里,如果在异步数据完成加载之后,旋转屏幕,使用上述a、b两种方法都不会很难,无非是保存数据和恢复数据。...Fragment保存大量数据", "onSaveInstanceState保存数据", "getLastNonConfigurationInstance已经被弃用", "RabbitMQ...,这里使用Thread.sleep模拟了一个耗时操作;当用户旋转屏幕发生重新启动时,会onSaveInstanceState中进行数据存储,在onCreate中对数据进行恢复,免去了不必要再加载一遍...Fragment保存大量数据", "onSaveInstanceState保存数据", "getLastNonConfigurationInstance已经被弃用", "RabbitMQ

    2.1K20

    1.2、Activity状态保存

    在这种情况下,您可以通过回调方法onSaveInstanceState()来保存Activity一些重要信息,并通过onCreate()或者onRestoreInstanceState()回调方法来恢复这些信息...onSaveInstanceState()方法传递进来Bundle对象中,存入我们想要保存东西。...然后,当Activity被重新创建时候,我们就可以通过onCreate()或者onRestoreInstanceState()方法Bundle对象,来获得我们之前存入数据。...你不应该去保存那些持久化数据,那些持久化数据应该放到onPause方法里面去执行(比如将数据存储到数据库中)。...所以我们可以用下面的办法,来测试Activity状态保存。 就是旋转设置,让屏幕方向变化(当然前提是你没有锁定设置旋转功能,Activity也没有设置屏幕方向)。

    85530

    ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

    ViewModel 被设计用来以与生命周期相关方式保存和管理 UI 相关数据。ViewModel 允许数据在例如屏幕旋转这样配置更改后依然保留。...你通过 onSaveInstanceState() bundle 将查询传入 ViewModel,这将决定它已加载了必须数据从而不需要重新查询数据库。...ViewModel 不是 onSaveInstanceState() 替代品,因为他们在与配置更改相关销毁时保存数据,而不能在系统杀死应用进程时保存。...复杂数据通过本地持久化保存然后用 onSaveInstanceState() 来保存那些复杂数据唯一 ID。ViewModel 在数据加载后将他们保存在内存中。...在这个场景下,ViewModel 在 activity 旋转或者进入后台时仍保留数据,而单纯用 onSaveInstanceState() 并没那么容易实现。

    3.8K30

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

    在这种情况下,您可以通过回调方法onSaveInstanceState()来保存Activity一些重要信息,并通过onCreate()或者onRestoreInstanceState()回调方法来恢复这些信息...你不应该去保存那些持久化数据,那些持久化数据应该放到onPause方法里面去执行(比如将数据存储到数据库中)。...所以我们可以用下面的办法,来测试Activity状态保存。 就是旋转设置,让屏幕方向变化(当然前提是你没有锁定设置旋转功能,Activity也没有设置屏幕方向)。...他保存数据是持有化,还是永久性onSaveInstanceState()  这个方法适合临时保存一些非永久性数据.如果要持久化保存数据,就要将操作放在onStop(), onDestroy...也即是key-value模式了 因为在android设计中中,这个函数主要作用是用来保存UI状态,现在怎么去保存一些自己数据保存: @Override public void onSaveInstanceState

    1K20

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

    和onCreate方法,因为我们可以通过onCreate和onRestoreInstanceState方法来判断Activity是否被重建了,如果被重建了,那么我们就可以取出之前保存数据并恢复,从上图我们可以看出...关于保存和恢复View层次结构,系统工作流程是这样:首先Activity被意外终止时,Activity会调用onSaveInstanceState保存数据,然后Activity会委托Window去保存数据...最后顶层容器再去意义通知它子元素来保存数据,这样整个数据保存过程就完成了。可以发现,这就是一种典型委托思想,上层委托下次,父容器委托子元素去处理一件事情。...比如我们上文提到旋转屏幕所造成Activity异常销毁,这个过程和正常停止Activity是不一样,因为旋转屏幕后,Activity被销毁同时会立刻创建Activity实例,这个时候Activity...3)后台Activity——已经被暂停Activity,比如执行了onStop,优先级最低 当系统内存不足时,系统就会按照上述优先级去杀死目标Activity所在进程,并且后续通过onSaveInstanceState

    1.8K40

    Activity具体解释(生命周期、以各种方式启动Activity、状态保存,全然退出等)

    这种方法中通经常使用来提交一些还没保存更改到持久数据 中,停止一些动画或其他一些耗 CPU 操作等等。...注:由于 onSaveInstanceState 方法不一定会被调用,所以你应该仅仅是用它来保存一些 activity 转换过程状态(即 UI 状态),而不能用来保存永久性数据。...但你能够用 onPause 方法在用户离开 activity 时来保存永久性数据,比方须要保存数据数据。...有一个非常好方法能够用来检验应用程序保存状态能力,就是简单地旋转设备来改变屏幕方向。...由于这个原因,你 activity 能否在其又一次创建时完毕保存状态就显得尤为重要,由于用户常常会在使用应用程序时旋转屏幕

    39510

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

    或者 onRestoreInstanceState 中保存数据; -- 注意 : 只有是系统自动回收时候才会保存 Bundle 对象数据; -- Bundle 对象来源 : onCreate()...(Bundle outState) 方法 outState 参数作用 :  -- 数据保存 : Activity 声明周期结束时候, 需要保存 Activity 状态时候, 会将要保存数据使用键值对形式...保存在 Bundle 对象中; -- 恢复数据 : 在 Activity onCreate()方法 创建 Activity 时候会传入一个 Bundle 对象, 这个 Bundle 对象就是这个..., 会自动保存组件状态, 注意, 只有有 id 组件才会保存; -- 关于默认 super.onSaveInstanceState(outState) : 该默认方法是实现 组件状态保存; (..., 如果内存充足, 系统没有销毁这个 Activity, 就不需要调用; -- Bundle 对象传递 : 该方法保存 Bundle 对象在 Activity 恢复时候也会通过参数传递到 onCreate

    39020

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

    此方法通常用于确认对持久性数据保存更改、停止动画以及其他可能消耗 CPU 内容,诸如此类。...恢复数据方式跟随生命周期不同有两种情况。 系统在销毁 Activity 后重建 Activity,Activity 必须恢复之前保存状态。...Activity 瞬态(UI 状态)切勿使用它来存储持久性数据,而应使用onPause在用户离开 Activity 后存储持久性数据,例如应保存数据数据。...例如,EditText 小部件保存用户输入任何文本,CheckBox小部件保存复选框选中或未选中状态。您只需为想要保存其状态每个小部件提供一个唯一 ID(通过 android:id 属性)。...如果小部件没有 ID,则系统无法保存其状态。(默认情况下系统不会恢复储存成员值(变量)) 你只需旋转设备,让屏幕方向发生变化,就能有效地测试您应用状态恢复能力。

    56310

    Activity详细解释(生命周期、以各种方式启动Activity、状态保存,等完全退出)

    通过上面的方法能够启动新Activity了,但假设我要从当前Activity中传递数据到新Activity呢?...虽然如此,即使你没做不论什么操作或没有实现 onSaveInstanceState() 方法,你 activity 状态也能通过Activity 类里面默认实现 onSaveInstanceState...所以你应该仅仅是用它来保存一些 activity 转换过程状态(即 UI 状态),而不能用来保存永久性数据。但你能够用 onPause 方法在用户离开 activity 时来保存永久性数据。...比方须要保存数据数据。 有一个非常好方法能够用来检验应用程序保存状态能力。就是简单地旋转设备来改变屏幕方向。...由于这个原因,你 activity 能否在其又一次创建时完毕保存状态就显得尤为重要,由于用户常常会在使用应用程序时旋转屏幕

    1K20

    Android 生命周期备忘录 — 第一部分:单一 Activities

    当状态发生变化时,系统会通过一个生命周期回调方法通知你。...activity 应用被用户开启,结束,和重启时发生了什么: 场景 1:应用被终止并且重启 状态处理 onSaveInstanceState 不会被调用 (因为 activity 被结束了,你不需要保存状态...状态处理 当你 activity 进入 Stopped 状态,系统会使用 onSaveInstanceState保存应用状态以防系统一段时间后终止这个应用进程 (请看下面)。...假设应用进程没有被终止,这个应用实例会常驻在内存,保存所有状态。当这个 activity 回到前台工作时,它会恢复这些状态。你不需要重新初始化这些之前已生成组件。...activity 会被完全 destroy,但是 activity 状态会被保存下来并在下一个实例中恢复。

    31110

    ViewModel

    二.VIewModel生命周期特性   由于Android平台特殊性,若应用程序支持横竖屏切换,那么当用户旋转手机屏幕时候,我们还需要考虑数据存储和恢复。...为了验证这一点,我们在ViewModel中创建一个计时器,每隔1s钟,通过接口OnTimeChangeListener通知它调用者,并通过这个示例来学习一下ViewModel使用。   ...可以看到,当屏幕发生旋转时候,计时器仍然在继续,这意味着横竖屏下Activity对应ViewModel是同一个,它所持有的数据一直存在着。...五.ViewModel和onSaveInstanceState()方法   对于页面数据保存和恢复,也许你有这样疑问,onSaveInstanceState()方法同样可以解决屏幕旋转带来数据丢失问题...但是要注意,onSaveInstanceState()方法只能存储少量,能支持序列化数据,而ViewModel没有这个限制,ViewModel支持页面中所有数据

    22730

    Android 生命周期备忘录 — 第一部分:单一 Activities

    当状态发生变化时,系统会通过一个生命周期回调方法通知你。 为了更好解释生命周期是怎么运作,我们定义了根据现有组件进行分类一系列用户场景。...场景 1:应用被终止并且重启 状态处理 onSaveInstanceState 不会被调用 (因为 activity 被结束了,你不需要保存状态) onCreate 没有 Bundle 对象,如果重新打开应用的话...状态处理 当你 activity 进入 Stopped 状态,系统会使用 onSaveInstanceState保存应用状态以防系统一段时间后终止这个应用进程 (请看下面)。...activity 会被完全 destroy,但是 activity 状态会被保存下来并在下一个实例中恢复。...---- 单一 Activity — 场景 4:应用被系统暂停 触发原因: 开启多窗口模式 (API 24+)并且应用失去焦点 另一个应用部分地覆盖在正在运行应用上面(例如一个购买对话框,一个运行时权限确认对话框

    62830

    Android 进阶解密笔记-插件化

    现在知道做法也就只有在使用ActionBarDrawerToggle使用在onPostCreate需要在屏幕旋转时候等同步下状态,Google官方提供一些实例就是如下做法: @Overrideprotected...在系统内存不足时候可能不会执行onStop方法,因此程序状态保存、独占设备和动画关闭、以及一些数据保存最好在onPause中进行,但要注意不能太耗时。...而onRestoreInstanceState是在onStart之后、onResume之前调用** onSaveInstanceState调用 在Activity被覆盖或退居后台之后,系统资源不足将其杀死...第一种情况我们无法保证什么时候发生,系统根据资源紧张程度去调度;第二种是屏幕翻转方向时,系统先销毁当前Activity,然后再重建一个新,调用此方法时,我们可以保存一些临时数据;第三种情况系统调用此方法是为了保存当前窗口各个...onSaveInstanceState调用顺序是在onStop中调用。

    82310

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

    通过重写一个activity所有生命周期onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我们可以清楚地知道当某个activity(假定为...调用遵循一个重要原则,即当系统“未经你许可”时销毁了你activity,则onSaveInstanceState会被系统调用,这是系统责任,因为它必须要提供一个机会让你保存数据(当然你不保存那就随便你了...现在应该明白了:在onPause(),onStop()以及onDestroy()中需要保存是那些需要永久化是数据,而不是保存用于恢复状态数据,状态数据有专门方法:onSaveInstanceState...注:由于onSaveInstanceState()并不是每次销毁时都会调用,所以不要在其中保存那些需要永久化数据,执行保存那些数据最好地方是:onPause()中。...测试你程序状态恢复能力最好方法是:旋转屏幕,每当屏幕方向改变时,当前activity就会被系统销毁,然后重新创建。

    66431

    Android技能树 — Activity小结

    在Activity销毁时候先通过onSaveInstanceStateBundle参数里面,存储一些内容,然后在重建时候调用onRestoreInstanceState方法传递刚才那个Bundle,...我们先来看什么时候会出现异常生命周期: 资源相关系统配置改变(最常见就是旋转屏幕) 内存不足时候,会杀死优先级低Activity 我们来分别查看: 旋转屏幕 最简单还是用例子来说明,我们写了一个...简单来说:super.onSaveInstanceState(outState);它会帮我们保存Activity相关视图,然后分别调用每个ViewonSaveInstanceState方法,比如EditText...在自己类中这个方法就是保存了输入内容。...就是会调用自己这个方法,然后再把保存内容再赋值进去。

    50210
    领券