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

Android会自动保存和恢复某个字段的实例状态吗?

是的,Android会自动保存和恢复某个字段的实例状态。当Activity或Fragment被销毁并重新创建时,Android框架会自动保存和恢复这些字段的值,以确保用户在应用程序发生配置更改(如屏幕旋转)或系统资源不足时不会丢失数据。

Android提供了两种方法来实现这种自动保存和恢复的功能:

  1. onSaveInstanceState()和onRestoreInstanceState()方法:这两个方法是Activity和Fragment生命周期中的回调方法。在Activity或Fragment被销毁之前,onSaveInstanceState()方法会被调用,开发者可以在该方法中保存需要恢复的字段值。当Activity或Fragment重新创建时,onRestoreInstanceState()方法会被调用,开发者可以在该方法中恢复之前保存的字段值。
  2. Parcelable和Bundle:开发者可以实现Parcelable接口来自定义对象的保存和恢复。通过将对象保存到Bundle中,然后在onSaveInstanceState()和onRestoreInstanceState()方法中传递Bundle对象,可以实现自动保存和恢复对象的状态。

这种自动保存和恢复实例状态的功能在以下场景中非常有用:

  • 屏幕旋转:当用户将设备从纵向切换到横向或反之时,Activity会被销毁并重新创建。
  • 多窗口模式:在支持多窗口的设备上,当用户同时打开多个应用程序时,系统可能会销毁后台应用程序的Activity以释放资源。
  • 系统资源不足:当系统资源不足时,系统可能会销毁后台应用程序的Activity以释放内存。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

本文实例讲述了Android编程实现状态保存方法。...2、当我们在玩游戏时候,可能又想听歌,然后我们按home或者back键退出游戏去启动音乐,然后再回到游戏,当我们回到游戏时候,发现刚刚状态还是被保存。这种情况,我们可以这样保存状态。...在onPause方法中保存状态数据,在onResume方法中进行状态恢复。 activity状态是被保留在内存中,当resume时,它会立即开始执行。...但是现在google又冒出一个新东西:onSaveInstanceState(),观其名可知其意:它是专门用来保存实例状态,这个“实例”不是指activity对象,而是它所在进程,因为activity...通过重写一个activity所有生命周期onXXX方法,包括onSaveInstanceStateonRestoreInstanceState方法,我们可以清楚地知道当某个activity(假定为

66431

onSaveInstanceStateonRestoreInstanceState详解

这个方法在一个activity被杀死前调用,当该 activity在将来某个时刻回来时可以恢复其先前状态。...四. onSaveInstanceState()方法默认实现    如果我们没有覆写onSaveInstanceState()方法, 此方法默认实现自动保存activity中某些状态数据, 比如...android应用框架中定义几乎所有UI控件都恰当实现了 onSaveInstanceState()方法,因此当activity被摧毁重建时, 这些UI控件自动保存恢复状态数据....比如EditText控件自动保存恢复输入数据,而CheckBox控件自动保存恢复选中状态.开发者只需要为这些控件指定一个唯一ID(通 过设置android:id属性即可), 剩余事情就可以自动完成了....如果没有为控件指定ID, 则这个控件就不会进行自动数据保存恢复操作。

2.2K50
  • Android编程设计模式之备忘录模式详解

    本文实例讲述了Android编程设计模式之备忘录模式。...分享给大家供大家参考,具体如下: 一、介绍 备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态,这有点像我们平时说”后悔药“。...备忘录模式实现方式需要保证被保存对象状态不能被对象从外部访问,目的是为了保护好被保存这些对象状态完整性以及内部实现不向外暴露。...二、定义 在不破坏封闭前提下,捕获一个对象内部状态,并在该对象之外保存这个状态,这样,以后就可将该对象恢复到原先保存状态。 三、使用场景 需要保存一个对象在某一个时刻状态或部分状态。...优点: 给用户提供了一种可以恢复状态机制,可以使用户能够比较方便地回到某个历史状态。 实现了信息封装,使用户不需要关心状态保存细节。

    71520

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

    本章主要学习使用ViewModel保存UI数据,修复GeoQuiz应用UI状态丢失缺陷。 一、引入 ViewModel 依赖 ViewModel 类旨在以注重生命周期方式存储管理界面相关数据。...当某个对象强引用另一个要被销毁对象时,内存泄漏就会发生。这样强引用阻止垃圾回收器从内存里清理对象。设备配置改变带来内存泄漏是常见问题。...三、进程销毁时保存数据 上面讲述是发生屏幕旋转等配置更改情况下,activity会被销毁重启,这个时候可以用viewmodel来自动保存数据与获取数据。...“杀死”时候,帮用户保存一些不是很大关键数据,从而在再次加载app时候恢复状态。...如图设置: 不保留活动 四、ViewModel与保存实例状态 保留实例状态ViewModel都不是长期存储解决方案。

    62110

    【DB笔试面试428】在Oracle中,实例恢复介质恢复区别是什么?

    需要注意是,还原只是建立在数据库备份基础版本上,例如,如果数据库备份包括0级备份很多1级备份,还原只是应用0级备份,恢复过程根据情况自动应用1级备份或Redo日志将数据库恢复到一致性状态。...这时数据文件里内容不能体现实例崩溃时状态。这样关闭数据库是不一致。当下次启动实例时,Oracle会由SMON进程自动进行实例恢复。...时候,就会自动实例恢复。...检查点位置始终保证所有比其SCN低检查点所对应已提交更改都已保存到数据文件。 ? 在实例恢复期间,数据库必须应用检查点位置重做线程结尾之间发生更改。如上图所示,某些更改可能已经写入数据文件。...总结一下,前滚回滚是Oracle数据库实例发生意外崩溃,重新启动时候,由SMON进行自动恢复过程。

    1.5K21

    在Oracle中,实例恢复介质恢复区别是什么?

    需要注意是,还原只是建立在数据库备份基础版本上,例如,如果数据库备份包括0级备份很多1级备份,还原只是应用0级备份,恢复过程根据情况自动应用1级备份或Redo日志将数据库恢复到一致性状态。...这时数据文件里内容不能体现实例崩溃时状态。这样关闭数据库是不一致。当下次启动实例时,Oracle会由SMON进程自动进行实例恢复。...时候,就会自动实例恢复。...检查点位置始终保证所有比其SCN低检查点所对应已提交更改都已保存到数据文件。 在实例恢复期间,数据库必须应用检查点位置重做线程结尾之间发生更改。如上图所示,某些更改可能已经写入数据文件。...总结一下,前滚回滚是Oracle数据库实例发生意外崩溃,重新启动时候,由SMON进行自动恢复过程。

    1.8K20

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

    一般来说, 调用onPause()onStop()方法后activity实例仍然存在于内存中, activity所有信息状态数据不会消失, 当activity重新回到前台之后, 所有的改变都会得到保留...onSaveInstanceState()方法默认实现 如果开发者没有覆写onSaveInstanceState()方法, 此方法默认实现自动保存activity中某些状态数据, 比如activity...中各种UI控件状态. android应用框架中定义几乎所有UI控件都恰当实现了onSaveInstanceState()方法, 因此当activity被摧毁重建时, 这些UI控件自动保存恢复状态数据...比如EditText控件自动保存恢复输入数据, 而CheckBox控件自动保存恢复选中状态....开发者只需要为这些控件指定一个唯一ID(通过设置android:id属性即可), 剩余事情就可以自动完成了. 如果没有为控件指定ID, 则这个控件就不会进行自动数据保存恢复操作.

    815100

    Android技能树 — Fragment总体小结

    然后网上有很多教程,叫你提交时候使用commitAllowingStateLoss()方法,虽然说不会抛出错误,但是如果在Activity已经保存状态完之后提交了它,到时候Ativity意外崩溃,再恢复数据时候就不会恢复在...Activity保存状态之后提交fragment更新,造成状态丢失了。...也就是如下图: 一般反应是,addToBackStackpopBackStack不是应该像上面的类似addremove一样,都一个层级??...Fragment重建恢复数据 推荐下面这篇文章: [译] 保存/恢复 Activity Fragment 状态最佳实践 引用一段话: 完全分开处理Fragment状态view状态 为了使你代码变得干净可扩展...如果这里有任何属性是属于View,在View内部进行保存恢复.如果这里有任何属性是属于Fragment,在Fragment内部进行保存恢复

    25110

    Android技能树 — Fragment总体小结

    然后网上有很多教程,叫你提交时候使用commitAllowingStateLoss()方法,虽然说不会抛出错误,但是如果在Activity已经保存状态完之后提交了它,到时候Ativity意外崩溃,再恢复数据时候就不会恢复在...Activity保存状态之后提交fragment更新,造成状态丢失了。...一般反应是,addToBackStackpopBackStack不是应该像上面的类似addremove一样,都一个层级??...推荐下面这篇文章: [译] 保存/恢复 Activity Fragment 状态最佳实践 引用一段话: 完全分开处理Fragment状态view状态 为了使你代码变得干净可扩展,你最好把Fragment...如果这里有任何属性是属于View,在View内部进行保存恢复.如果这里有任何属性是属于Fragment,在Fragment内部进行保存恢复

    1.1K20

    TIMSDK 常见问题

    1) 实例化一个基类保存从 TIMMessage.getElement() 获取消息元素 2) 判断元素类型 3) 根据元素类型进行不同处理,例如文本消息通过 getText() 读取字符串,文件消息通过...暂不支持,setReadMessage() 是根据参数传入该条消息时间戳之前所有消息置为已读状态,填 NULL 将该会话所有消息置为已读状态 23.我能获取进群前历史消息记录?...可以,请使用聊天室(ChatRoom) 群组类型创建群组,最多拉取消息根据配置漫游消息时长决定 24.saveMessage() 是否保存到云端?...设置自动登录时没有登录过该用户导致; 5.一个 SDKAPPID 可以用于两个 App ?...在此期间若网络恢复正常或重连成功,IMSDK 自动继续之前发送任务,网络超时则返回错误码:9508 3.报错:errCode: 9506, errDesc: out of frequency limit

    5.7K102

    安卓 topic-UI-设置 settings

    当用户进行更改时,PreferenceActivity 自动保留与每个 Preference 相关设置。...使用此设计一大好处是,在大屏幕上运行时,PreferenceActivity 自动提供双窗格布局(如图)。 image.png **1.** 标头用 XML 标头文件定义。...如果 Preference 提供自己 UI(例如对话框),请保存恢复状态以处理生命周期变更(例如,用户旋转屏幕)。 下文介绍如何完成所有这些任务。.... } 保存设置值 初始化当前值 提供默认值 保存恢复首选项状态 正如布局中 View 一样,在重启 Activity 或片段时(例如,用户旋转屏幕),Preference 子类也负责保存恢复状态...要正确保存恢复Preference 类状态,您必须实现生命周期回调方法 onSaveInstanceState() onRestoreInstanceState()。

    3.1K10

    Android拾萃- Activity生命周期启动模式

    只有在您确定用户希望自动保存这些更改情况(比如,草拟电子邮件时)下,才能在 onPause() 中永久性存储用户更改。...但是,如果系统因系统局限性(而非正常应用行为)而销毁 Activity,尽管 Activity 实际实例已不在,系统记住其存在,这样,如果用户导航回实例,系统会使用描述 Activity 被销毁时状态一组已保存数据创建...系统用于恢复先前状态保存数据被称为“实例状态”,并且是 Bundle 对象中存储键值对集合。 注意:每次用户旋转屏幕时,您 Activity 将被销毁并重新创建。...这样,如果您 Activity 实例被销毁并重新创建,布局状态便恢复为其先前状态,且您无需代码。...注:为了 Android 系统恢复 Activity 中视图状态,每个视图必须具有 android:id 属性提供唯一 ID。

    1.6K50

    1.2、Activity状态保存

    Activity状态保存默认机制 然而,即使我们不重写onSaveInstanceState()方法,Activity对于onSaveInstanceState()方法默认实现,仍然帮我们恢复某些状态...框架中每一个widget都适当实现了这个方法,这样任何可见UI更改活动在重新创建时自动保存恢复。...当然,如果在某些特殊情况下,你不需要某个View自动保存恢复状态,那么你可以设置View属性android:saveEnabled为false,或者调用setSaveEnabled()方法。...尽管系统帮我们实现了UI组建自动保存恢复,但是有时候也需要去保存恢复一些其他成员变量。...在这种情况下,记得重写onSaveInstanceState()onRestoreInstanceState()方法是,记得带上super方法实现,因为那里就是系统UI组件自动保存恢复默认实现。

    85530

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

    Activity状态保存默认机制 然而,即使我们不重写onSaveInstanceState()方法,Activity对于onSaveInstanceState()方法默认实现,仍然帮我们恢复某些状态...框架中每一个widget都适当实现了这个方法,这样任何可见UI更改活动在重新创建时自动保存恢复。...当然,如果在某些特殊情况下,你不需要某个View自动保存恢复状态,那么你可以设置View属性android:saveEnabled为false,或者调用setSaveEnabled()方法。...尽管系统帮我们实现了UI组建自动保存恢复,但是有时候也需要去保存恢复一些其他成员变量。...在这种情况下,记得重写onSaveInstanceState()onRestoreInstanceState()方法是,记得带上super方法实现,因为那里就是系统UI组件自动保存恢复默认实现。

    1K20

    Android高频面试专题 - 基础篇(一)Activity

    并且会调用onSaveInstanceState,我们可以在这里保存当前Activity状态,比如:文本框中用户输入数据,ListView滚动位置等。...并通过onRestoreInstanceState来恢复之前状态,调用onSaveInstanceState时机总会发生在onStop之前,至于会不会调用时机发生在onPause方法之前,那就说不定了...将某个Activity启动模式设置为singleTop,启动此Activity时,先检查栈顶是否是此Activity实例,如果是,则直接复用,如果不是,才创建实例。...启动某个Activity时,先检查任务栈中是否有该Activity实例,有就直接复用(把前面所有的Activity出栈),没有才创建并入栈。浏览器主界面通常采用此模式。...此标记位一般singleTask启动模式一起出现,此情况下,若被启动Activity实例存在,则系统会调用它onNewIntent。

    2K31

    写给Android工程师协程指南

    通俗一点就是,协程指的是一种特殊函数,它可以在执行到某个位置时 暂停 ,并 保存 当前执行状态,然后 让出 CPU控制权,使得其他代码可以继续执行。...它不依赖操作系统调度,而是由用户自己控制协程执行。协程之间切换只需要保存恢复少量状态,开销较小。协程通信和数据共享方式比线程更加灵活,通常使用消息传递或共享状态方式实现。...内置取消支持:取消操作自动在运行中整个协程层次结构内传播。 Jetpack 集成:许多 Jetpack 库都包含提供全面协程支持扩展。某些库还提供自己协程作用域,可供您用于结构化并发。...基础概念 在标准解释中,如下所示: 在协程中,当我们代码执行到某个位置时,可以使用特定关键字来暂停函数执行,同时保存函数执行状态,这个过程叫做 [挂起],挂起操作会将控制器交还给调用方,调用方可以继续执行其他任务...当再次调用被挂起函数时,它会从上一次暂停位置开始继续执行,这个过程称为 [恢复]。在恢复操作之后,被挂起函数继续执行之前保存状态,从而可以在不重新计算情况下继续执行之前逻辑。

    1.5K40
    领券