• onRetainNonConfigurationInstance和getLastNonConfigurationInstance


    很多网友可能知道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中恢复原有状态。比如:

    1. @Override  
    2. public Object onRetainNonConfigurationInstance() {  
    3.     final MyDataObject data = MyLoadedData();  
    4.     return data;  
    5. }  


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

    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()之间。


  • 相关阅读:
    Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式
    Spring Boot2 系列教程(一)纯 Java 搭建 SSM 项目
    Python 解析XML实例(xml.sax)
    深度学习Tensorflow相关书籍推荐和PDF下载
    气象netCDF数据可视化分析
    Python 操作MySQL 数据库
    用这个库 3 分钟实现让你满意的表格功能:Bootstrap-Table
    浅谈压缩感知(二十六):压缩感知重构算法之分段弱正交匹配追踪(SWOMP)...
    web开发工具flask中文英文书籍-持续更新
    Python 在气象上的应用
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4147304.html
Copyright © 2020-2023  润新知