第一篇:

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

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

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

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

Objectobj = 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中恢复原有状态。比如:
@Overridepublic Object onRetainNonConfigurationInstance() {    final MyDataObject data = MyLoadedData();    return data;}

在恢复窗口时,我们可以不使用onRestoreInstanceState,而代替的是 getLastNonConfigurationInstance 方法。我们可以直接在onCreate中使用,比如
@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main);    final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();    if (data == null) {        data = loadMyData();    }    ...}


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

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

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


转:http://www.cofftech.com/thread-7566-1-1.html


更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. ndk 编译android内核模块无法加载 解决方法
  5. Android拨号器的实现(四中点击事件)
  6. android 开发是 页面JS调用后台java方法
  7. Android(安卓)- Animation(二)
  8. Android完全退出应用程序的方法
  9. view-ListView学习

随机推荐

  1. android 完全退出自己的应用程序
  2. SDL Android(安卓)编译小记
  3. ant 编译 android工程
  4. plist读写,NSArray,NSData,NSnumber,字典
  5. Android(安卓)高清加载巨图方案 拒绝压缩
  6. Android工程中添加图片资源
  7. Matrix用法
  8. 自定义BaseActivity
  9. java-Service生命周期及用法! - 随心
  10. Android实现加载富文本以及SpannableStri