目前,我正在编写android应用程序,其主要功能只是在屏幕上绘画。主要问题是如何存储应用程序的数据模型。最佳做法是什么?
当前数据模型如下所示:
public class BoardModel {
public Bitmap mBoard;
public int mLineWidth = 1;
public int mForegroundColor = Color.GREEN;
public int mBackgroundColor = Color.BLACK;
}
调用主要活动的onCreate方法时,将实例化此类。在生命周期中,活动可以被销毁。例如,当用户将设备方向从纵向更改为横向时,就会发生这种情况。所以要存储我的模型,我像这样重写onSaveInstanceState:
protected void onSaveInstanceState(Bundle outState) {
outState.putParcelable(KEY_MODEL, mModel);
}
并修改了onCreate方法,如下所示:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (savedInstanceState == null) {
mModel = new BoardModelParcelable();
} else {
mModel = savedInstanceState.getParcelable(KEY_MODEL);
}
}
我还添加了以下类来实现Parcelable接口
public class BoardModelParcelable extends BoardModel implements Parcelable{
....
}
问题是,当我向模型添加任何数据时,我必须修改BoardModelParcelable来存储它。例如,我计划添加描述仪器的类,该类用于绘制某些内容。在这种情况下,我需要为仪器创建另一个类,该类实现Parcelable接口?还是应该将仪器数据存储在BoardModelParcelable中?看来我必须实现太多可打包对象。任何想法如何在不创建保存代码的情况下存储模型数据?
最佳答案
您可以使用不带UI的片段在活动重新创建之间保留数据。您必须调用setRetainInstance(true)
告诉框架在配置更改期间保留此片段。因此,在配置更改之后,将重新创建活动,但是此片段将与所有数据保持在以前的状态。关于该主题的非常好的文章:http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html
“自从Android 3.0中引入片段以来,在Activity实例之间保留活动对象的推荐方法是将它们包装和管理在保留的“工作”片段中。默认情况下,片段会在其父Activity消失时被销毁并重新创建发生配置更改。调用Fragment#setRetainInstance(true)可使我们绕过此破坏并重新创建周期,从而在重新创建活动时向系统发送信号以保留该片段的当前实例。”