我有一个应用程序,其主要活动是按下按钮调用其他活动。
主活动包含一个包含大量数据并且可以分配的类。数据是应用程序的主干,我需要在方向更改中保存它。为了实现这一点,它使用onSaveInstanceState并将parcelable对象放在bundle中。
但是,我注意到每次按下按钮并启动其中一个新活动以及方向更改时,都会调用onSaveInstanceState。这稍微减慢了向其他屏幕的过渡。
当我明确知道活动将被销毁而不是每次我定期离开活动时,是否有一种只存储此信息的好方法。我明白,当我离开主要活动时,它有可能被摧毁。
谢谢, M<
答案 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
,以便在配置更改时保留片段及其内容(在您的情况下为位图)。
价: