第一篇: 

很多网友可能知道Android横竖屏切换时会触发onSaveInstanceState,而还原时会产生onRestoreInstanceState,但是Android的Activity类还有一个方法名为onRetainNonConfigurationInstance和getLastNonConfigurationInstance这两个方法。

   我们可以通过  onRetainNonConfigurationInstance 代替 onSaveInstanceState,比如

  @Override
  public Object onRetainNonConfigurationInstance() 
 {    
       //这里需要保存的内容,在切换时不是bundle了,我们可以直接通过Object来代替
      return obj;
 }

 在恢复窗口时,我们可以不使用 onRestoreInstanceState,而代替的是 getLastNonConfigurationInstance 方法。我们可以直接在onCreate中使用,比如

  Object obj = getLastNonConfigurationInstance();     最终obj的内容就是上次切换时的内容。

  这里Android123提醒大家,每次Activity横竖屏切换时onCreate方法都会被触发。

转:http://www.android123.com.cn/androidkaifa/610.html


第二篇:

Android横竖屏切换时会触发onSaveInstanceState,而还原时会产生onRestoreInstanceState,但是Android的Activity类还有一个方法名为onRetainNonConfigurationInstance和getLastNonConfigurationInstance这两个方法。

    当Device configuration发生改变时,将伴随Destroying被系统调用。通过这个方法可以像onSaveInstanceState()的方法一样保留变化前的Activity State,最大的不同在于这个方法可以返回一个包含有状态信息的Object,其中甚至可以包含Activity Instance本身。新创建的Activity可以继承大量来至于Parent Activity State信息。

    用这个方法保存Activity State后,通过getLastNonConfigurationInstance()在新的Activity Instance中恢复原有状态。比如:

[java] view plaincopy

  1. @Override  

  2. public Object onRetainNonConfigurationInstance() {  

  3.     final MyDataObject data = MyLoadedData();  

  4.     return data;  

  5. }  


在恢复窗口时,我们可以不使用onRestoreInstanceState,而代替的是 getLastNonConfigurationInstance 方法。我们可以直接在onCreate中使用,比如

[java] view plaincopy

  1. @Override  

  2. public void onCreate(Bundle savedInstanceState) {  

  3.     super.onCreate(savedInstanceState);  

  4.     setContentView(R.layout.main);  

  5.   

  6.     final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();  

  7.     if (data == null) {  

  8.         data = loadMyData();  

  9.     }  

  10.     ...  

  11. }  



这个方法最大的好处是:
    * 当Activity曾经通过某个资源得到一些图片或者信息,那么当再次恢复后,无需重新通过原始资源地址获取,可以快速的加载整个Activity状态信息。
    * 当Activity包含有许多线程时,在变化后依然可以持有原有线程,无需通过重新创建进程恢复原有状态。
    * 当Activity包含某些Connection Instance时,同样可以在整个变化过程中保持连接状态。

下边是需要特别注意的几点:
    * onRetainNonConfigurationInstance()在onSaveInstanceState()之后被调用。

    * 调用顺序同样介于onStop() 和 onDestroy()之间。


转自 http://blog.csdn.net/java2009cgh/article/details/7008983


更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android 8.1 开机壁纸下半部分黑屏2-3秒的问题解决
  5. 详解Android使用@hide的API的方法
  6. Android(安卓)Bitmap Drawable byte[] InputStream 相互转换方法
  7. Android(安卓)1.5 1.6 2.0 2.1 2.2都有什么区别
  8. 解析底层原理!月薪20k+的Android面试都问些什么?深夜思考
  9. Android中的消息机制

随机推荐

  1. android图片切换ImageSwichter的动画切换
  2. android layout 属性大全
  3. Android修改默认控件焦点不highlight
  4. 安装Android(安卓)Studio——Installing
  5. android图片切换ImageSwichter的动画切换
  6. Android(安卓)SDK下载
  7. Android相对布局
  8. android http 请求方式
  9. Android(安卓)之 WebView
  10. android:layout_height="match_parent"和