gpt4 book ai didi

android - 在 Android 应用程序中保存数据模型

转载 作者:行者123 更新时间:2023-11-30 03:35:07 25 4
gpt4 key购买 nike

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

public class BoardModel {
public Bitmap mBoard;

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

当主 Activity 的onCreate方法被调用时,这个类被实例化。在它的生命周期中, Activity 可以被销毁。例如,当用户将设备方向从纵向更改为横向时,就会发生这种情况。因此,为了存储我的模型,我重写了 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 接口(interface)

public class BoardModelParcelable extends BoardModel implements Parcelable{
....
}

问题是,当我向我的模型添加任何数据时,我必须修改 BoardModelParcelable 来存储它。例如,我打算添加描述仪器的类,用于绘制一些东西。在这种情况下,我需要为仪器创建另一个实现 Parcelable 接口(interface)的类吗?或者我应该将仪器数据存储在 BoardModelParcelable 中吗?看来我必须实现太多可分包的对象。有没有关于如何在不创建这么多保存代码的情况下存储我的模型数据的想法?

最佳答案

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

“自从在 Android 3.0 中引入 Fragments 以来,在 Activity 实例中保留 Activity 对象的推荐方法是将它们包装和管理在保留的“worker”Fragment 中。默认情况下,Fragments 与其它们一起被销毁和重新创建发生配置更改时的父 Activity。调用 Fragment#setRetainInstance(true) 允许我们绕过这个销毁和重新创建循环,向系统发出信号以在重新创建 Activity 时保留 fragment 的当前实例。”

关于android - 在 Android 应用程序中保存数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16734852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com