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

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

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

2.7K30
您找到你想要的搜索结果了吗?
是的
没有找到

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

大家好,又见面了,是你们朋友全栈君。...onPouse() 当另外一个activity覆盖当前acitivty时,此时当前activity会进入到onPouse()方法中,当前activity是可见但不能与用户交互状态。...() Activity中onSaveInstanceState()onRestoreInstanceState() onSaveInstanceState(Bundle outState):...outState 参数作用 : 数据保存 : Activity 声明周期结束时候, 需要保存 Activity 状态时候, 会将要保存数据使用键值对形式 保存在 Bundle 对象中;...: 每个组件都 实现了 onSaveInstance() 方法, 在调用函数时候, 会自动保存组件状态, 注意, 只有有 id 组件才会保存; 关于默认 super.onSaveInstanceState

1.1K10

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

因此,您不应使用 onPause() 来保存应用或用户数据、进行网络调用,或执行数据库事务。因为在该方法完成之前,此类工作可能无法完成。 已进入已停止状态,因此系统将调用 onStop() 回调。...onStart()方法:活动由不可见到可见时候被调用,表示Activity正在启动,此时Activity可见但不在前台。 onResume()方法:活动准备好用户进行交互时调用。...在 Activity 由于异常情况被终止时,系统会调用 onSaveInstanceState 方法来保存当前 Activity 状态,该方法调用于 onStop 之前,与 onPause 方法没有时序关系...但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户行为决定了不需要保存Activity状态。...onSaveInstanceState() 只适合用于保存一些临时性状态,而onPause()适合用于数据持久化保存。 8. 谈谈横竖屏切换过程中调用函数 要切记这里活动已经被销毁了。

89000

唠唠 Activity 生命周期

除了正常状态数据持久化存储,异常情况下数据保存恢复也是必要。这里异常情况一般指系统配置变化,典型横竖屏切换,系统语言切换等。...异常情况下终止 Activity,系统会调用 onSaveInstanceState() 方法来保存当前 Activity 状态。那么哪些状态默认会被保存呢?...只要是实现了 onSaveInstanceState()方法 View,都会被保存下来。...所以一般建议直接在 onRestoreInstanceState 方法中进行状态恢复即可。 对于非 UI 状态其他数据,就得自己手动进行保存恢复了。...其实更好做法是使用 ViewModel ,它可以在系统配置变化发生 Activity 重建过程中来保存数据。 最后来说一下 onSaveInstanceState 调用时机问题。

34220

Android-活动生命周期(二)

android:theme属性,用于给当前活动指定主题,这里用,android:theme="@style/Theme.AppCompat.Dialog" 让DialogActivity使用对话框式主题...修改主活动布局代码,加入两个按钮,分别用于启动NormalActivityDialogActivity。 然后重写Activity7个回调方法,分别打印相应语句。...活动被回收怎么办 当一个活动进入停止状态,有可能被系统回收,那么当有一个活动A,在A基础上启动了活动B,A进入停止状态,这时由于系统内存不足,A被回收掉,这时按下Back键还是会正常显示A,但是不会执行...onSaveInstanceState()携带了一个Bundle类型参数,提供了一系列方法保存数据,比如可以使用putString()方法保存字符串,使用putInt()方法保存整型数据,每个保存方法需要传入两个参数...null,但是如果活动被系统回收之前有通过onSaveInstanceState()方法保存数据的话,这个参数就会带有之前保存全部数据,只需要通过相应取值方法将数据取出即可,修改MainActivity

35220

生命周期感知 Lifecycle

例如,如果回调在保存活动状态后运行 Fragment 事务,那么它将触发崩溃,因此我们永远都不想调用该回调。 为了简化此用例,Lifecycle 类允许其他对象查询当前状态。...当通过 onSaveInstanceState() 保存 Fragment 或 AppCompatActivity 状态时,在调用 ON_START 之前,它 UI 被认为是不可变。...保存状态尝试修改 UI 可能会导致应用程序导航状态不一致,这就是为什么如果状态保存后应用程序运行 FragmentTransaction ,则 FragmentManager 会引发异常原因。...换句话说,Android 系统调用 onSaveInstanceState() ,但不一定调用 onStop() 。...这将创建一个可能较长时间间隔,在该时间间隔中,即使无法修改其 UI 状态,观察者仍认为生命周期处于活动状态

1.2K20

Android Activity 活动生命周期

这个方法在活动由不可见变为可见时候调用,对资源进行加载。 onResume()。这个方法在活动准备好用户进行交互时候调用。此时活动一定位于返回栈栈顶,并且处于运行状态。...这个方法在系统准备去启动或者恢复另一个活动时候调用。我们通常会在这个方法中将一些消耗CPU 资源释放掉,以及保存一些关键数据,但这个方法执行速度一定要快,不然会影响到新栈顶活动使用。...这个方法在活动被销毁之前调用,之后活动状态将变为销毁状态。 onRestart()。这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。...---- 活动被回收前数据保存与恢复 onSaveInstanceState()回调方法可以保证在活动被回收之前一定会被调用,因此我们可以通过这个方法来解决活动被回收时临时数据得不到保存问题。...这个参数在一般情况下都是null,但是如果在活动被系统回收之前有通过onSaveinstanceState()方法来保存数据的话,这个参数就会带有之前所保存全部数据。

72320

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

如何高效地使用 ViewModel 来保存恢复 UI 状态? 简而言之,你可以混合混合 ViewModels、 onSaveInstanceState()、本地持久化一起使用。...如果你想让用户在应用运行在后台三个小时候后再返回到与之前完全相同状态,你也需要将数据持久化。这是因为一旦你活动进入后台,此时如果你设备运行在低内存情况下,你应用进程是可以被终止。...如何高效地使用 ViewModel 来保存恢复 UI 状态? 简而言之,你可以混合使用 ViewModel、 onSaveInstanceState()、本地持久化。继续读看看如何使用。...这是一个良好保存恢复 activity 状态方法。基于你 activity 实现,你可能根本不需要 onSaveInstanceState()。...为了高效保存恢复 UI 状态,可以混合使用 持久化、onSaveInstanceState() ViewModel。

3.6K30

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

在上篇博文中用新 ViewModel 类开发了一个简单用例来保存配置更改过程中篮球分数。ViewModel 被设计用来以与生命周期相关方式保存管理 UI 相关数据。...如何高效地使用 ViewModel 来保存恢复 UI 状态? 简而言之,你可以混合混合 ViewModels、 onSaveInstanceState()、本地持久化一起使用。...如何高效地使用 ViewModel 来保存恢复 UI 状态? 简而言之,你可以混合使用 ViewModel、 onSaveInstanceState()、本地持久化。继续读看看如何使用。...这是一个良好保存恢复 activity 状态方法。基于你 activity 实现,你可能根本不需要 onSaveInstanceState()。...为了高效保存恢复 UI 状态,可以混合使用 持久化、onSaveInstanceState() ViewModel。

92020

1.2、Activity状态保存

Activity状态保存基本使用 学习Activity生命周期,我们知道,当Activity进入到paused或者stopped状态后,这个Activity状态仍然保存着。...因为这个Activity对象仍然保存在内存中,它所有信息状态仍然是存在,当这个Activity再次返回到前台是,它仍然保持着离开时候样子。...widget都适当实现了这个方法,这样任何可见UI更改活动在重新创建时自动保存恢复。...尽管系统帮我们实现了UI组建自动保存恢复,但是有时候也需要去保存恢复一些其他成员变量。...在这种情况下,记得重写onSaveInstanceState()onRestoreInstanceState()方法是,记得带上super方法实现,因为那里就是系统UI组件自动保存恢复默认实现。

82930

Fragment 重叠 遮盖问题 完美解决

1.导致Fragment 重叠 遮盖原因  主要还是因为Fragment状态保存机制,当系统内存不足时,Fragment主Activity被回收,Fragment实例并没有随之被回收。...2.如果这个问题不是必现问题 ,调试时候 可以将  开发者选项中  “不保留活动” 打开 ,为了 模拟 Activity 被及时回收。...原本以为只有在系统因为内存回收Activity时才会调用onSaveInstanceState(),居然在转跳到其他Activity、打开多任务窗口、使用Home回到主屏幕这些操作中也被调用,然而onRestoreInstanceState...对于这句话解释是“Always call the superclass so it can save the view hierarchy state”,大概意思是“总是执行这句代码来调用父类去保存视图层状态...其实到这里大家也就明白了,就是因为这句话导致了重影出现,于是删除了这句话,然后onCreate()与onRestoreInstanceState()中同时使用问题一中创建Fragment方法,然后再通过保存切换状态

99020

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

因为这个Activity对象仍然保存在内存中,它所有信息状态仍然是存在,当这个Activity再次返回到前台是,它仍然保持着离开时候样子。...widget都适当实现了这个方法,这样任何可见UI更改活动在重新创建时自动保存恢复。...尽管系统帮我们实现了UI组建自动保存恢复,但是有时候也需要去保存恢复一些其他成员变量。..., 并且用户操作很快又回到当前这个页面,这个时候数据并没有丢失,还能最大程度恢复之前状态.这就是这个方法最大意义 3.怎么复写问题,也就是怎么自己保存自己数据了,使用是bundle模式,...style="white-space:pre"> etCon.setText(savedInstanceState.getString("inputCon", "")); } } 状态保存主要使用除了横竖屏切换

96420

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

1、什么是活动(Activity)   活动(Activity)是一种可以包含用户界面的组件,主要用于用户进行交互。一个应用程序中可以包含零个或多个活动但不包含任何活动应用程序很少见。...(因为并不是每一个活动都会布满屏幕,例如Toast等出现时,前一个活动就是暂停状态),该状态活动仍然是完全存活,系统也不愿意去回收 停止状态:当一个活动不再处于栈顶位置,并且完全不可见时,系统愿意为这种活动保存相应状态变量...Activity前台生命周期:从调用onResume()到相应调用onPause()。在此生命期中,活动总是处于运行状态,此时活动是可以用户进行交互。 8、如何保存活动状态?   ...onSaveInstanceState是用来保存UI状态,你可以使用保存你所想保存东西,在Activity杀死之前,它一般在onStop或者onPause之前触发,onRestoreInstanceState...通常onSaveInstanceState()只适合用于保存一些临时性状态,而onPause()适合用于数据持久化保存。 9、活动启动模式:4种 standard:这是默认启动模式。

1.1K90

Android Heroes Reading Notes 4

(3)如果应用长时间处于stopped状态并且此时系统内存极为紧张时候,系统就会回收Activity,此时系统在回收之前会回调onSaveInstanceState方法来保存应用数据Bundle。...当该Activity重新创建时候,保存Bundle数据就会传递到onRestoreSaveInstanceState方法onCreate方法中,这就是onCreate方法中Bundle savedInstanceState...onSaveInstanceState方法onRestoreInstanceState方法“不一定”是成对被调用。...onSaveInstanceState调用遵循一个重要原则,即当系统“未经你许可”时销毁了你activity,则onSaveInstanceState会被系统调用,这是系统责任,因为它必须要提供一个机会让你保存数据...:显示进程内存状态

42210

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

本章主要学习使用ViewModel保存UI数据,修复GeoQuiz应用UI状态丢失缺陷。 一、引入 ViewModel 依赖 ViewModel 类旨在以注重生命周期方式存储管理界面相关数据。...“杀死”时候,帮用户保存一些不是很大关键数据,从而在再次加载app时候恢复状态。...通常,覆盖onSaveInstanceState(Bundle)函数,在Bundle对象中,保存当前activity小或暂存状态数据;覆盖onStop()函数,保存永久性数据,比如用户编辑文字等。...如图设置: 不保留活动 四、ViewModel与保存实例状态 保留实例状态ViewModel都不是长期存储解决方案。...因此,要处理设备配置更改 加上 系统发起进程终止 两种情况,就结合使用 ViewModel onSaveInstanceState() 方式来保存数据状态

59210

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

当用户在开启一个新activity时,当前activity可能在内存中处于停止状态也可能由于新activity需要更多内存而被系统杀掉了,但不论怎样,当用户在新activity上按返回键时,他希望看到是原先...通过重写一个activity所有生命周期onXXX方法,包括onSaveInstanceStateonRestoreInstanceState方法,我们可以清楚地知道当某个activity(假定为...至于onRestoreInstanceState方法,需要注意是,onSaveInstanceState方法onRestoreInstanceState方法“不一定”是成对被调用。...现在应该明白了:在onPause(),onStop()以及onDestroy()中需要保存是那些需要永久化是数据,而不是保存用于恢复状态数据,状态数据有专门方法:onSaveInstanceState...原来activity类已实现了onSaveInstanceState(),在onSaveInstanceState()默认实现中,会调用所有控件相关方法,把控件们状态保存下来,比如EditText

64531

Android 系统开发_四大组件篇 -- 探讨 Activity 生命周期

系统仍然会为这种活动保持相应状态成员变量,但是这并不是完全可靠,当其他地方需要内存时,处于停止状态活动有可能会被系统回收。 4、销毁状态 当一个活动从返回栈种移除后就变成了销毁状态。...我们通常会在这个方法中将一些消耗 CPU 资源释放掉,以及保存一些关键数据,但这个方法执行速度一定要快,不然会影响到新栈顶活动使用。 onStop() 这个方法在活动完全不可见时候调用。...在前台生存期内,活动总是处于运行状态,此时活动是可以用户进行交互,我们平时看到接触最多就是这个状态活动。 我们看下官方给出 Activity 生命周期示意图: ?...onSaveInstanceState() 方法会携带一个 Bundle 类型参数,Bundle 提供了一系列方法用于保存数据,比如可以使用 putString() 方法保存字符串,使用 putInt...这个参数一般情况下是 null ,但是如果在活动被系统回收之前有通过 onSaveInstanceState() 方法来保存数据的话,这个参数就会带有之前所保存全部数据,我们只需要再通过相应取值方法将数据取出即可

42420

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

A销毁后立刻创建B,A中一些信息会在B中恢复。 异常情况下调用流程: 调用onSaveInstance保存当前Activity状态。注意,它与onPause方法没有先后之分。...调用onDestroy方法销毁当前活动。 重新onCreate该活动。 调用onStart方法之后,再调用onRestoreInstance方法加载保存数据。...注意: onSaveInstanceStateonRestoreInstanceState调用时机: 当某个activity变得“容易”被系统销毁时,该activityonSaveInstanceState...这是显而易见,系统不知道你按下HOME后要运行多少其他程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性数据。...总而言之,onSaveInstanceState调用遵循一个重要原则,即当系统“未经你许可”时销毁了你activity,则onSaveInstanceState会被系统调用,这是系统责任,因为它必须要提供一个机会让你保存数据

96220

Activity 36 大难点,你会几个?「建议收藏」

paused :activity 失去焦点时候,被一个非全屏 activity 占据或者被一个透明 activity 覆盖,这个状态 activity 并没有销毁,它所有的状态信息成员变量仍然存在...3.2 内存不足时系统会杀掉后台Activity,若需要进行一些临时状态保存,在哪个方法进行 Activity onSaveInstanceState() onRestoreInstanceState...除非该 activity 不是被用户主动销毁,通常 onSaveInstanceState() 只适合用于保存一些临时性状态,而 onPause() 适合用于数据持久化保存。...一个可视进程被认为是及其重要且不会被杀死,除非为了保持前台进程运行。 5.3 服务进程 服务进程是通过 startService() 方法启动进程,但不属于前台进程可见进程。...一般地有很多后台进程运行着,因此它们保持在一个 LRU( least recently used ,即最近最少使用,如果您学过操作系统的话会觉得它很熟悉,跟内存页面置换算法 LRU 一样)列表以确保最近使用最多活动进程最后被杀

72320
领券