Android onSaveInstanceState和启动子活动。

时间:2011-12-11 03:29:08

标签: android

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

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

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

当我明确知道活动将被销毁而不是每次我定期离开活动时,是否有一种只存储此信息的好方法。我明白,当我离开主要活动时,它有可能被摧毁。

谢谢, M<

1 个答案:

答案 0 :(得分:0)

对于原始值,您应该使用onSaveInstanceState。要进行恢复,您可以使用onRestoreInstanceState,也可以使用onCreate中的某些代码:

if(savedInstanceState != null) {
  // restore old state
} else {
  // a fresh start
}

现在要恢复像Bitmap等大对象,如果它们的创建成本不高并且不会使UI缓慢,则在恢复时再次创建它们。如果您不想这样,那么使用onRetainNonConfigurationInstance,代码将如下所示:

@Override
public Object onRetainNonConfigurationInstance () {
  return bmp;
}

@Override
public void onCreate() {

  bmp = (Bitmap)getLastNonConfigurationInstance();
}

警告:此api已弃用,您可以在旧平台上使用它。我把它放在这里是为了说明目的。实现这一目标的新方法更具参与性。

以下是详细参考:

getLastNonConfigurationInstance

onRetainNonConfigurationInstance

新api级别11及以上的推荐溶剂:

“使用新的Fragment API setRetainInstance(boolean);这也可以通过Android兼容包在旧版平台上使用。”单击上面的链接时来自文档的片段。

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

价:

setRetainInstance