Bundle savedInstanceState(Activity被系统干掉前,保存调用)

原创 2016年05月31日 19:23:08

经常会出现用户按到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也获取到了,说明恢复了状态。恭喜,实验成功。

版权声明:本文为Ruiman博主原创文章,未经博主允许不得转载。

状态保存 Bundle savedInstanceState

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

onPause()和onSaveInstanceState(Bundle savedInstanceState)回调函数保存

转自:http://blog.sina.com.cn/s/blog_652dd96d0100ug6h.html 在看贪吃蛇代码的时候,看到下面这个回调函数,用来保存贪吃蛇的游戏数据。      ...

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

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

onCreate(Bundle savedInstanceState)

原文地址:onCreate(Bundle savedInstanceState)" style="text-decoration:none; color:rgb(0,107,119)">android...

谈谈Bundle savedInstanceState

android学习小结-Bundle savedInstanceState的作用
  • fjz2014
  • fjz2014
  • 2015年07月02日 21:55
  • 237

android onCreate(Bundle savedInstanceState)中参数的含义作用

转自出处 写过Android程序的都知道Activity中有一个名称叫onCreate的方法。该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始。可是有一点容易被忽视...

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

写过Android程序的都知道Activity中有一个名称叫onCreate的方法。该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始。可是有一点容易被忽视,就是onCr...

Bundle savedInstanceState作用和 onsaveInstanceState关系

一.  Bundle savedInstanceState作用和 onsaveInstanceState关系                                             ...

关于onCreate(Bundle savedInstanceState, PersistableBundle persistentState)

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

android onCreate(Bundle savedInstanceState)

android onCreate(Bundle savedInstanceState)   写过Android程序的都知道Activity中有一个名称叫onCreate的方法。该方法是在Ac...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Bundle savedInstanceState(Activity被系统干掉前,保存调用)
举报原因:
原因补充:

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