多个屏幕在Android应用中共享数据的首选方式?

时间:2014-07-23 14:22:28

标签: java android android-activity

我有一个需要从不同屏幕访问数据的Android应用程序。主要的问题是,每个人都需要能够修改数据,并且有相当多的一部分 - 300个整数分为六个数组。

我能想到的选择是:

  1. 将每个屏幕放在单独的视图中,并使用ViewAnimator作为最顶层布局,根据需要在子视图之间切换;这样,数组在主活动中定义,并且可以被所有屏幕访问(包括读取和写入)。

  2. 将每个屏幕放在自己的Activity中,并将数据从一个屏幕传递到另一个屏幕,方法是将它放入startActivityForResult调用中包含的Bundle中(任何更改都将通过返回的Intent的Extras传回) onActivityResult)。这样做的问题是,数据必须被复制很多次,这似乎在时间和内存方面都需要相当多的开销。

  3. 创建一个Class来保存数据;在主活动中创建该类的变量,并来回传递该变量 - 但是变量本身是否被传递给第二个活动或其副本(因此任何更改都不会反映在该变量中)主要活动)?

  4. 这种情况有没有首选方法?我要留下什么了吗?

1 个答案:

答案 0 :(得分:1)

你的选择#3正朝着正确的方向发展。至于从任何地方访问变量..你想使用Singleton设计模式。通常,这会创建一个资源的单个实例(在这种情况下,您的300万个整数!)如果每个活动正在处理不同的'设置'数据然后我误解了你的请求,你不应该使用这种单例方法。

为了简化示例,我使用了一个String(mExamplePayload)来表示您的数据。对于您的特定实现,您可以创建一个包含每个数组的变量(或为每个数组创建一个变量。)

public class MyData {

    private static MyData sMyData;
    private Context mAppContext;
    private String mExamplePayload;

    private MyData(Context c){
        mAppContext = c.getApplicationContext();
        mExamplePayload = "You can access this string from any Activity or Fragment";
    }

    public static MyData get(Context c){
        if (sMyData==null){
            sMyData = new MyData(c);                
        }
        return sMyData;
    }

    public String getPayload() {
        return mExamplePayload;
    }   
}

这就是您访问活动中数据的方式

MyData data = MyData.get(this);
String test = data.getPayload();

或片段

MyData data = MyData.get(getActivity());
String test = data.getPayload();