状态保存 Bundle savedInstanceState

转载 2015年07月07日 22:17:41

经常会出现用户按到home键,退出了界面,或者安卓系统意外回收了应用的进程,这种情况下,使用Bundle savedInstanceState就可以用户再次打开应用的时候恢复的原来的状态。


看一段代码:

  1. package com.example.test.com;  
  2.   
  3.   
  4. import android.app.Activity;  
  5. import android.os.Bundle;  
  6. import android.util.Log;  
  7. import android.view.Window;  
  8.   
  9. public class MainActivity extends Activity {  
  10.   
  11.     @Override  
  12.     protected void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.           
  15.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  16.         setContentView(R.layout.main);  
  17.           
  18.         //状态 判断  
  19.         if (savedInstanceState != null) {  
  20.             Log.d("HELLO""HELLO:应用进程被回收后,状态恢复");  
  21.             String string = savedInstanceState.getString("username");  
  22.             if (string != null) {  
  23.                 Log.d("HELLO""HELLO:" + string);  
  24.             }  
  25.         }  
  26.   
  27.     }  
  28.   
  29.     /** 
  30.      * 当某个activity变得“容易”被系统销毁时,该activity的onSaveInstanceState就会被执行, 
  31.      * 除非该activity是被用户主动销毁的,例如当用户按BACK键的时候 
  32.      * 一个原则:即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用 
  33.      * 情景: 
  34.      * 1. 当用户按下HOME键时 
  35.      * 2. 长按HOME键,选择运行其他的程序时。 
  36.      * 3. 按下电源按键(关闭屏幕显示)时。 
  37.      * 4. 从activity A中启动一个新的activity时。 
  38.      * 5. 屏幕方向切换时,例如从竖屏切换到横屏时。 
  39.      * 以上情景触发该函数,并且开发者可以保存一些数据状态 
  40.      */  
  41.     @Override     
  42.     public void onSaveInstanceState(Bundle savedInstanceState) {     
  43.       Log.d("HELLO""HELLO:当Activity被销毁的时候,不是用户主动按back销毁,例如按了home键");  
  44.       super.onSaveInstanceState(savedInstanceState);    
  45.       savedInstanceState.putString("username""initphp"); //这里保存一个用户名  
  46.     }     
  47.     
  48.     /** 
  49.      * onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的, 
  50.      * onRestoreInstanceState被调用的前提是, 
  51.      * activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下, 
  52.      * 则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面, 
  53.      * 然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁, 
  54.      * 故activity A的onRestoreInstanceState方法不会被执行 
  55.      */  
  56.     @Override     
  57.     public void onRestoreInstanceState(Bundle savedInstanceState) {     
  58.       super.onRestoreInstanceState(savedInstanceState);   
  59.       Log.d("HELLO""HELLO:如果应用进程被系统咔嚓,则再次打开应用的时候会进入");  
  60.     }     
  61. }  

我们的具体操作:

首先打开这个app应用

其次,按home键,例如意外中止,则会调用onSaveInstanceState方法。可以看到以下日志:


这个时候,如果直接去打开这个应用,可能系统并没有回收这个进程所在的资源,并不能体现出状态恢复的实验,我们可以通过DDMS中,中止这个APP的进程:

中止进程后,再打开应用进入,看看是否有日志:

可以看到上面 initphp这个username也获取到了,说明恢复了状态。恭喜,实验成功。

关键点在于:是否进程被系统回收掉


转自:http://blog.csdn.net/initphp/article/details/11973651

相关文章推荐

关于onCreate(Bundle savedInstanceState, PersistableBundle persistentState)

API21,Android5.0新属性,为Activity持久化存储数据

onCreate()方法中的参数Bundle savedInstanceState 的意义用法

Activity中有一个名称叫onCreate的方法。该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始。可是有一点容易被忽视,就是onCreate方法的参数saveIn...

Android.Bundle savedInstanceState 的意义用法

public class HelloActivity extends Activity { /** Called when the activity is first created. */ ...

对Bundle savedInstanceState, PersistableBundle persistentState的详解

今天在我写demo时,发现不管怎样,布局都加载不上。我就纳闷了,这代码也没问题啊,咋就布局加载不上呢?找来找去,原来是onCreate多了一个参数,导致布局加载不上。接下来我便讲讲onCreate的这...

onCreate中的savedInstanceState有何具体作用

在activity的生命周期中,只要离开了可见阶段,或者说失去了焦点,activity就很可能被进程终止了!,被KILL掉了,,这时候,就需要有种机制,能保存当时的状态,这就是savedInstanc...

Android savedInstanceState的作用和用法

Android savedInstanceState的作用和用法 Android savedInstanceState的作用和用法 代码如下: 好多博客和帖子都会有下面这个例子...

onCreate中的savedInstanceState有何具体作用

在activity的生命周期中,只要离开了可见阶段,或者说失去了焦点,activity就很可能被进程终止了!,被KILL掉了,,这时候,就需要有种机制,能保存当时的状态,这就是savedInstanc...

安卓开发41:状态保存 Bundle savedInstanceState

经常会出现用户按到home键,退出了界面,或者安卓系统意外回收了应用的进程,这种情况下,使用Bundle savedInstanceState就可以用户再次打开应用的时候恢复的原来的状态。 看一段...
  • initphp
  • initphp
  • 2013年09月24日 14:19
  • 9867

onCreate中的savedInstanceState有何具体作用

在activity的生命周期中,只要离开了可见阶段,或者说失去了焦点,activity就很可能被进程终止了!,被KILL掉了,,这时候,就需要有种机制,能保存当时的状态,这就是savedInstanc...
  • eustoma
  • eustoma
  • 2011年03月02日 07:51
  • 29505

关于onCreate方法的参数 Bundle savedInstanceState的作用

写过Android程序的都知道Activity中有一个名称叫onCreate的方法。该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始。可是有一点容易被忽视,就是onCr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:状态保存 Bundle savedInstanceState
举报原因:
原因补充:

(最多只允许输入30个字)