有效地将自定义Android的活动之间的对象数据[单声道的Android](Efficiently

2019-07-04 06:58发布

我一直在用难倒这一段时间。 我正在上存储一个人的渔获量,最喜欢的钓鱼地点的Android应用程序,钓具箱库存等数据。 我所有的类都是可序列化,并且可以保存和活动之间加载这似乎是迄今为止工作。 但是我预测,随着越来越多的数据存储,应用程序将开始运行缓慢。

什么我基本上问的是有没有办法留住整个应用程序这个数据,所以我不必每加载一个新的屏幕上弹出一次。 我已经找到了以下信息来帮助,但它需要一个更加清楚一点,我就明白了:

另一个论坛上说,你可以在应用程序对象东东吧:

[Application]
public class MyApp : Android.App.Application {
    public MyApp(IntPtr handle)
        : base (handle)
    {
    }

    public FishingData Data {get; set;}
}

然后在你的活动:

((MyApp) this.ApplicationContext).Data = value;

所以,我从来没有真正听说过这样的做法的,我不知道这会度过整个应用程序(我觉得无论哪种方式,将不得不通过序列装载数据。这是我想要的应用程序待办事项:

第一个活动是主菜单,以下必须完成的屏幕加载时:

  1. 如果找到一个设置文件,使用序列加载以前FishingData对象(我知道如何做到这一点)
  2. 如果没有,然后创建一个新的清洁FishingData对象后保存(我知道这也)
  3. 所以,现在我们有一个FishingData对象,我如何确保我不必重复步骤1-2,在每一个活动。 我怎么能以某种方式FishingData对象传递到下一个活动,并确保其生活globaly而应用程序还活着。 我只想一次加载(通过序列化)(< -不知道如何做到这一点),只有当用户将数据添加到该对象(我知道该怎么做)保存。

任何帮助将不胜感激。 这是缠着我我似乎无法想出解决办法。 这似乎是它会做一个平常的事,但我还没有得到任何运气找到任何详细信息。

Answer 1:

您可以使用此方法,因为你会为万岁Application对象是活的(这意味着它因你的整个应用程序和活动)。 你可以阅读更多有关使用存储在全局变量Application对象这里 。 我不认为单会有所作为,这将阻止您使用这种方法。



Answer 2:

这里是我将通过parcelable绕过App我的数据。 比方说你有一个名为渔夫类(用户基本)

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.Creator<Fisherman> CREATOR
         = new Parcelable.Creator<Fisherman>() {
     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个步骤,每一个到它自己的问题,因为你的努力做的是略高于一题多长时间



文章来源: Efficiently Passing Custom Object Data between Android Activities [Mono Android]