zoukankan      html  css  js  c++  java
  • onSaveInstanceState场景

    需要注意的是, onSaveInstanceState()方法并不是一定会被调用的, 因为有些场景是不需要保存状态数据的. 比如用户按下BACK键退出activity时, 用户显然想要关闭这个activity, 此时是没有必要保存数据以供下次恢复的, 也就是onSaveInstanceState()方法不会被调用. 如果调用onSaveInstanceState()方法, 调用将发生在onPause()或onStop()方法之前. 

     1 public class MainActivity extends Activity {  
     2     public static final int SECOND_ACTIVITY = 0;  
     3     private String temp;  
     4   
     5     @Override  
     6     public void onCreate(Bundle savedInstanceState) {  
     7         super.onCreate(savedInstanceState);  
     8         // 从savedInstanceState中恢复数据, 如果没有数据需要恢复savedInstanceState为null  
     9         if (savedInstanceState != null) {  
    10             temp = savedInstanceState.getString("temp");  
    11             System.out.println("onCreate: temp = " + temp);  
    12         }  
    13     }  
    14   
    15     public void onResume() {  
    16         super.onResume();  
    17         temp = "xing";  
    18         System.out.println("onResume: temp = " + temp);  
    19         // 切换屏幕方向会导致activity的摧毁和重建  
    20         if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) {  
    21             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  
    22             System.out.println("屏幕切换");  
    23         }  
    24     }  
    25       
    26     // 将数据保存到outState对象中, 该对象会在重建activity时传递给onCreate方法  
    27     @Override  
    28     protected void onSaveInstanceState(Bundle outState) {  
    29         super.onSaveInstanceState(outState);  
    30         outState.putString("temp", temp);  
    31     }  
    32 }

    onSaveInstanceState()方法的默认实现

    如果开发者没有覆写onSaveInstanceState()方法, 此方法的默认实现会自动保存activity中的某些状态数据, 比如activity中各种UI控件的状态. android应用框架中定义的几乎所有UI控件都恰当的实现了onSaveInstanceState()方法, 因此当activity被摧毁和重建时, 这些UI控件会自动保存和恢复状态数据. 比如EditText控件会自动保存和恢复输入的数据, 而CheckBox控件会自动保存和恢复选中状态. 开发者只需要为这些控件指定一个唯一的ID(通过设置android:id属性即可), 剩余的事情就可以自动完成了. 如果没有为控件指定ID, 则这个控件就不会进行自动的数据保存和恢复操作.

    由上所述, 如果开发者需要覆写onSaveInstanceState()方法, 一般会在第一行代码中调用该方法的默认实现: super.onSaveInstanceState(outState).

    是否需要覆写onSaveInstanceState()方法

    既然该方法的默认实现可以自动的保存UI控件的状态数据, 那什么时候需要覆写该方法呢?

    如果需要保存额外的数据时, 就需要覆写onSaveInstanceState()方法. 如需要保存类中成员变量的值(见上例).

    onSaveInstanceState()方法适合保存什么数据

    由于onSaveInstanceState()方法方法不一定会被调用, 因此不适合在该方法中保存持久化数据, 例如向数据库中插入记录等. 保存持久化数据的操作应该放在onPause()中. onSaveInstanceState()方法只适合保存瞬态数据, 比如UI控件的状态, 成员变量的值等.

  • 相关阅读:
    。。。Hibernate 查询数据 事务管理。。。
    如何在easyui datagrid 中显示外键的值
    easyui datagrid 中序列化后的日期格式化
    使用Log4net把日志写入到SqlServer数据库
    在ALV点击Key值调用TCode,跳过初始屏幕
    JAVA环境变量设置
    在Jsp中调用静态资源,路径配置问题
    eclipse下项目复制改名注意事项
    HTML5与CSS3基础教程第八版学习笔记16-21章
    HTML5与CSS3基础教程第八版学习笔记11~15章
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/8526471.html
Copyright © 2011-2022 走看看