Activity状态保存
来源:互联网 发布:微信淘宝推广怎么做的 编辑:程序博客网 时间:2024/05/29 09:17
1、当某个activity变得”容易”被系统销毁时,该activity的onSaveInstanceState()就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的时候。onSaveInstanceState()的调用遵循一个重要原则,即当系统存在“未经你许可”时销毁了我们的activity的可能时。调用将发生在onPause()或onStop()方法之前
如果我们没有覆写onSaveInstanceState()方法, 此方法的默认实现会自动保存activity中的某些状态数据, 比如activity中各种UI控件的状态.。android应用框架中定义的几乎所有UI控件都恰当的实现了onSaveInstanceState()方法,因此当activity被摧毁和重建时, 这些UI控件会自动保存和恢复状态数据. 比如EditText控件会自动保存和恢复输入的数据,而CheckBox控件会自动保存和恢复选中状态.开发者只需要为这些控件指定一个唯一的ID(通过设置android:id属性即可), 剩余的事情就可以自动完成了.如果没有为控件指定ID, 则这个控件就不会进行自动的数据保存和恢复操作。
关于onSaveInstanceState (),是在函数里面保存一些View有用的数据到一个Parcelable对象并返回。在Activity的onSaveInstanceState(Bundle outState)中调用View的onSaveInstanceState (),返回Parcelable对象,接着用Bundle的putParcelable方法保存在Bundle savedInstanceState中。当系统调用Activity的的onRestoreInstanceState(Bundle savedInstanceState)时, 同过Bundle的getParcelable方法得到Parcelable对象,然后把该Parcelable对象传给View的onRestoreInstanceState (Parcelable state)。在的View的onRestoreInstanceState中从Parcelable读取保存的数据以便View使用。
2、onRestoreInstanceState()被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用。
onRestoreInstanceState()在onStart() 和 onPostCreate(Bundle)之间调用。
3、由于onSaveInstanceState()方法不一定会被调用, 因此不适合在该方法中保存持久化数据, 例如向数据库中插入记录等. 保存持久化数据的操作应该放在onPause()中。若是永久性值,则在onPause()中保存;若大量,则另开线程吧,别阻塞UI线程。
在执行了onPause()方法之后,直到执 行onResume()之前,该activity所在的进程都是有可能“突然死亡”的,onStop()和onDestroy()方法并不能保证一定会被执行。所以onPause()方法是持久化相关数据的最后的可靠时机。
- 保存Activity的状态
- 保存Activity的状态
- 保存Activity的状态
- 保存Activity的状态
- Activity状态保存
- Activity的状态保存
- activity的状态保存
- Activity状态保存
- Activity状态保存
- ACTIVITY状态保存
- 保存活动(Activity)状态
- Activity状态的保存
- 保存Activity的状态
- 保存activity状态
- 保存Activity的状态
- Activity保存状态
- activity状态的保存。
- Activity,Fragment状态保存
- react-表单
- Leetcode--231、Power of Two
- H5制作饼状图
- linux 内核学习----------模块(LKM:loading kernel module)
- Kotlin学习笔记——标准库kotlin.io / java.io.File
- Activity状态保存
- 33 linux服务管理
- MongoDB和Redis区别
- Android 官方兼容库 EmojiCompat Support Library
- Linux线程学习总结
- 自动布局之autoresizingMask使用详解(Storyboard&Code)
- finally和return执行前后顺序关系
- java多线程并发及线程池
- windows下编译hadoop成功 执行异常org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z