【问题标题】:Holding data model in android application在android应用程序中保存数据模型
【发布时间】:2013-05-24 20:42:29
【问题描述】:

目前我正在编写 android 应用程序,其主要功能只是在屏幕上进行手指绘画。主要问题是如何存储应用程序的数据模型。最佳做法是什么? 当前数据模型如下所示:

public class BoardModel {
public Bitmap mBoard;

public int mLineWidth = 1;
public int mForegroundColor = Color.GREEN;
public int mBackgroundColor = Color.BLACK;
}

这个类是在main Activity的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 中?看起来我必须实现太多可打包的对象。任何想法如何存储我的模型数据而无需创建这么多的保存代码?

【问题讨论】:

    标签: android mvp parcelable


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-07-30
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 2013-04-14
      • 2018-03-05
      • 1970-01-01
      相关资源
      最近更新 更多