在android应用程序中持有数据模型

时间:2013-05-24 12:20:05

标签: android mvp parcelable

目前我正在编写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 中执行存储仪器数据?看起来我必须实现太多的parcelable对象。任何想法如何存储我的模型数据而不创建这么多的保存代码?

1 个答案:

答案 0 :(得分:1)

您可以使用不带UI的Fragment在活动重新创建之间保留数据。您必须调用setRetainInstance(true)告诉框架在配置更改期间保留此片段。因此,在配置更改后,将重新创建活动,但此片段将保留所有数据的先前状态。关于这个主题的非常好的文章:http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

“自从Android 3.0中引入Fragments以来,在Activity实例中保留活动对象的推荐方法是在保留的”worker“Fragment中包装和管理它们。默认情况下,Fragments会被破坏并重新创建parent发生配置更改时的活动。调用Fragment #setRetainInstance(true)允许我们绕过这个destroy-and-recreate循环,通知系统在重新创建活动时保留片段的当前实例。“