Android基础部分再学习---activity的状态保存
Posted lxjshuju
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android基础部分再学习---activity的状态保存相关的知识,希望对你有一定的参考价值。
主要是bundle 这个參数
參考地址:http://blog.csdn.net/lonelyroamer/article/details/18715975
学习Activity的生命周期,我们知道,当Activity进入到paused或者stopped状态后,这个Activity的状态仍然保存着。
由于这个Activity对象仍然保存在内存中。它的全部信息和状态仍然是存在的。当这个Activity再次返回到前台是,它仍然保持着离开时候的样子。
然而。假设Activity进入到了后台。系统为了回收内存,有可能会去销毁该Activity,那么。当用户通过导航返回的时候。系统就不能简单的去恢复这个Activity,而是会又一次创建这个Activity对象。可是对于普通用户来说,他并不知道系统销毁了Activity并又一次创建它,因此,可能希望该Activity保存和他离开时候一样的状态。
在这样的情况下,您能够通过回调方法onSaveInstanceState()来保存Activity的一些重要信息,并通过onCreate()或者onRestoreInstanceState()回调方法来恢复这些信息。
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- Log.d("roamer", "onSaveInstanceState");
- }
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Log.d("roamer", "onCreate");
- }
- @Override
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
- Log.d("roamer", "onRestoreInstanceState");
- }
步骤例如以下图:
注意:并非每一次Activity销毁。系统都回去回调onSaveInstanceState()方法,我们是我们自己finish掉该Activity,那么onSaveInstanceState()方法就不会被调用。
而且系统调用onSaveInstanceState()方法的时机通常是在onStop()之前,可是也有可能是onPause之前。
而且系统调用onRestoreInstanceState()的时机。是在onStart()之后,onResume之前。
Activity状态保存的默认机制
- //View的onRestoreInstanceState()方法
- //该方法同意每一个View提供自己须要保存的信息
- @Override
- protected void onRestoreInstanceState(Parcelable state) {
- // TODO Auto-generated method stub
- super.onRestoreInstanceState(state);
- }
差点儿android框架中的每个widget都适当的实现了这种方法,这样不论什么可见的UI更改活动在又一次创建时自己主动保存和恢复。
比如,EditText部件保存用户输入的不论什么文本,CheckBox部件保存是否被选中。
我们唯一要做的工作就是提供一个惟一的ID(android:ID属性)为每个widget保存其状态。假设一个部件没有一个ID,则系统不能保存其状态。
当然,假设在某些特殊的情况下,你不须要某个View自己主动保存和恢复他的状态。那么你能够设置View的属性android:saveEnabled为false,或者调用setSaveEnabled()方法。
虽然系统帮我们实现了UI组建的自己主动保存和恢复,可是有时候也须要去保存和恢复一些其它的成员变量。在这样的情况下。记得重写onSaveInstanceState()和onRestoreInstanceState()方法是。记得带上super方法的实现,由于那里就是系统UI组件自己主动保存和恢复的默认实现。
注意:由于onSaveInstnceState()方法并非Activity销毁前一定被运行,所以你最好只保存与Activity状态相关的信息(UI状态)。你不应该去保存那些持久化的数据,那些持久化的数据应该放到onPause方法里面去运行(比方将数据存储到数据库中)。
測试Activity状态保存的方法
onSaveInstanceState() 仅仅有在系统即将要自己主动清理销毁Activity或Fragment前才会调用,
换句话说:你自己finish。他肯定不会调用的,必须是系统自己触发的,
比方
1, 因为重力感应 手机从竖屏变为横屏,
2, 手机点击Home键和长按Home键
3, 点击电源键锁屏时
4, 从当前Activity跳到还有一个Activity
5, 应用内存不足即将自己主动销毁时
2.onSaveInstanceState他保存的数据是持有化的。还是永久性的呢@Override public void onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState); String content = etCon.getText().toString(); outState.putString("inputCon", content); }取出来:
@Override public void onViewStateRestored(Bundle savedInstanceState){ <span style="white-space:pre"> </span>super.onViewStateRestored(savedInstanceState); <span style="white-space:pre"> </span>//恢复之前输入框的内容 <span style="white-space:pre"> </span>if(savedInstanceState != null){ <span style="white-space:pre"> </span>etCon.setText(savedInstanceState.getString("inputCon", "")); } }
以上是关于Android基础部分再学习---activity的状态保存的主要内容,如果未能解决你的问题,请参考以下文章