在活动之间传递/使用非原始对象

时间:2011-11-30 20:21:32

标签: android

我需要在活动之间传递我的对象列表。我不想每次都使用parcelable或序列化数据。我也不想将其保存在本地文件或数据库中。这可能让我使用静态对象。

让我说我在活动Activity1到Activity2之间使用ListA。我可以

方法1:在其中一个活动中创建一个静态ListA,并完成该静态ListA的所有内容。

方法2:在另一个类中创建一个静态列表,我只是用它来存储这个List并在这个列表上做我所有的东西。但这意味着只要我的进程正在运行就会保持这种状态,并且当我不需要它时我必须手动将其设置为null。

Approach3。我正在扩展上面的类,使用静态HashMap实现它。 我有两种方法,一种是使用唯一键将列表存储在静态HashMap中,另一种方法是检索列表并在每次检索数据时将其删除,以便静态HashMap中不再存在List。因此,我们必须只传递生成的随机密钥,以便在我可以使用Intents作为额外传递的活动之间存储数据。

当我使用上述任何一种方法时会出现任何问题,这将是最好的方法。

2 个答案:

答案 0 :(得分:1)

我会考虑创建一个Application对象,并像单例一样使用它来访问您的数据。我在这里描述了这种方法:http://chrisrisner.com/31-Days-of-Android--Day-7%E2%80%93Sharing-Data-Between-Activities。有些人似乎不喜欢以这种方式使用Application对象,但是对我来说比将静态对象放在Activity上更有意义。

答案 1 :(得分:1)

Uggg静力学!男人,我希望所有的开发人员都能理解全局变量是坏的,以及它们如何使你的程序变得更加脆弱和你的生活地狱。我们只讨论他们30多年来的糟糕程度,但不幸的是,在他们彻底摆脱他们之前,没有人知道这一点。

首先我会说你的数据序列化很快。有很棒的工具可以快速序列化你的对象,你可以使用我更喜欢http://flexjson.sourceforge.net

因此,如果您只是完全反对这一点,您可以通过子类化它来传递此对象,在Android Manifest中声明您的实现,并且每个活动都可以访问Application实例:

public class MyActivity extends Activity {
    public void onCreate( Bundle bundle ) {
        MyApplication application = (MyApplication)getApplication();
        Object anInstanceFromAnotherActivity = application.getSomeInput();
    } 
}

这样做的缺点是,当用户返回应用程序时,如果内存消失,您的应用程序将被回收,并且您无法获得屏幕可能需要的输入。 Android框架试图让你在bundle中序列化事物,因为如果它决定销毁你的应用程序,你总是可以从bundle中重建自己。现在有一些捷径你可以采取措施,如果应用程序被回收,重定向人员重新开始,但那些取决于你的程序以及如果它们有意义它会做什么。

这就是使用序列化胜过所有其他形式的持久性(parcelables,文件,数据库)的地方,因为它可以在一行代码中完成。