我有一个应用程序,其中有一个主活动,调用按钮按下其他活动。
主活动托管一个类,该类包含大量数据,并且是可打包的。数据是应用程序的主干,我需要跨方向更改保存它。为了实现这一点,它使用onSaveInstanceState并将parcelable对象放入包中。
但是,我注意到,每当我按下按钮并启动一个新的活动以及方向更改时,都会调用onSaveInstanceState。这稍微减慢了转换到其他屏幕的速度。
有没有一种好方法,当我确定活动将被销毁时,而不是每次我周期性地离开活动时,才存储这些信息。我明白,当我离开主要活动的那一刻,它就有可能被摧毁。
谢谢,M<
发布于 2011-12-11 13:24:02
对于原始值,您应该使用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级及以上的建议解决方案:
“改用新的片段应用编程接口setRetainInstance(布尔型);在较旧的平台上也可以通过安卓兼容包获得。”当您单击上面的链接时,文档中的代码片段。
因此,您将在片段中创建位图,并在片段上调用setRetainInstance,以便片段及其内容(在本例中为位图)在配置更改时将被保留。
参考:
setRetainInstance
https://stackoverflow.com/questions/8461767
复制相似问题