我已经被这一段时间困扰了一段时间。 我正在开发一款Android应用程序,可以存储一个人的捕鱼量,最喜欢的钓鱼地点,钓具箱库存和其他数据。 我的所有类都是Serializable,可以保存和加载到目前为止似乎有效的活动之间。 但我预测随着越来越多的数据存储,应用程序将开始运行缓慢。
我基本上要问的是有没有办法在整个应用程序中保留这些数据,所以每次popup一个新屏幕时我都不必加载它。 我已经find了以下信息来帮助,但需要让我更清楚一点:
另一个论坛说你可以在Application对象中填充它:
[Application] public class MyApp : Android.App.Application { public MyApp(IntPtr handle) : base (handle) { } public FishingData Data {get; set;} }
然后在你的活动中:
((MyApp) this.ApplicationContext).Data = value;
所以我以前从未真正听说过这种方法,我不确定这将贯穿整个应用程序过程(我觉得它必须通过序列化加载数据。这就是我想要的应用程序待办事项:
第一个活动是主菜单,并且在加载屏幕时必须执行以下操作:
如果find设置文件,请使用序列化加载以前的FishingData对象(我知道如何执行此操作)
如果没有,那么创建一个新的干净的FishingData对象以便以后保存(我也知道这个)
现在我们有了一个FishingData对象,如何确保我不必在每个活动中重复步骤1-2。 我怎么能以某种方式将FishingData对象传递给下一个活动,并确保它在应用程序仍然存在时生成全局。 我只想加载一次(通过序列化) (< – 不知道如何做到这一点)并仅在用户向该对象添加数据时保存它(我知道该怎么做)。
任何帮助将不胜感激。 这让我烦恼,我似乎无法弄清楚这一点。 这似乎是常见的事情,但我没有find任何详细信息。
您可以使用此方法,只要您的Application对象处于活动状态,它就会存在(这意味着它将贯穿整个应用程序和活动)。 您可以在此处阅读有关使用存储在Application对象中的全局variables的更多信息。 我不认为单声道会产生影响,这会阻止你使用这种方法。
以下是我将如何通过parcelable传递我的数据。 假设你有一个名为Fisherman的类(基本上是一个用户)
public class Fisherman implements Parcelable { private String name; private Tacklebox box; public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(name); out.writeParcelable(box, 0); } public static final Parcelable.CreatorCREATOR = new Parcelable.Creator() { public Fisherman createFromParcel(Parcel in) { return new Fisherman(in); } public Fisherman[] newArray(int size) { return new Fisherman[size]; } }; private Fisherman(Parcel in) { name = in.readString(); box = in.readParcelable(com.fisher.Tacklebox); } }
在此示例中,您为每个数据模型定义parcelable。 所以说你有一个渔夫对象,其中包含另一个名为tacklebox的对象。 您还将为tacklebox定义此项,依此类推,如果您继续嵌套模型。 这样,您需要做的就是在活动之间传递数据
Intent intent = new Intent(this, Activity.class); intent.putParcelableExtra("com.fisher.Fisherman", fisherman);
并阅读
Bundle b = getIntent().getExtras(); Fisherman fisher = b.getParcelable("com.fisher.Fisherman");
这个不幸的回答只是问题的第3步,但我建议将你的3个步骤中的每个步骤分解为自己的问题,因为你试图做的事情比一个问题稍长一些