首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android onSaveInstanceState和启动子活动。

Android onSaveInstanceState和启动子活动。
EN

Stack Overflow用户
提问于 2011-12-11 11:29:08
回答 1查看 426关注 0票数 0

我有一个应用程序,其中有一个主活动,调用按钮按下其他活动。

主活动托管一个类,该类包含大量数据,并且是可打包的。数据是应用程序的主干,我需要跨方向更改保存它。为了实现这一点,它使用onSaveInstanceState并将parcelable对象放入包中。

但是,我注意到,每当我按下按钮并启动一个新的活动以及方向更改时,都会调用onSaveInstanceState。这稍微减慢了转换到其他屏幕的速度。

有没有一种好方法,当我确定活动将被销毁时,而不是每次我周期性地离开活动时,才存储这些信息。我明白,当我离开主要活动的那一刻,它就有可能被摧毁。

谢谢,M<

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-11 13:24:02

对于原始值,您应该使用onSaveInstanceState。要进行恢复,您可以使用onRestoreInstanceStateonCreate中的一些代码,如下所示:

代码语言:javascript
复制
if(savedInstanceState != null) {
  // restore old state
} else {
  // a fresh start
}

现在,为了恢复Bitmap等大对象,如果它们的创建成本不高,并且不会使您的UI变得迟钝,那么可以在恢复时重新创建它们。如果您不想这样做,那么使用onRetainNonConfigurationInstance,代码将如下所示:

代码语言:javascript
复制
@Override
public Object onRetainNonConfigurationInstance () {
  return bmp;
}

@Override
public void onCreate() {

  bmp = (Bitmap)getLastNonConfigurationInstance();
}

警告:此api已弃用,您可以在旧平台上使用它。我把它放在这里是为了说明。实现这一点的新方法更加复杂。

下面是详细的参考:

getLastNonConfigurationInstance

onRetainNonConfigurationInstance

适用于新api 11级及以上的建议解决方案:

“改用新的片段应用编程接口setRetainInstance(布尔型);在较旧的平台上也可以通过安卓兼容包获得。”当您单击上面的链接时,文档中的代码片段。

因此,您将在片段中创建位图,并在片段上调用setRetainInstance,以便片段及其内容(在本例中为位图)在配置更改时将被保留。

参考:

setRetainInstance

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8461767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档