【问题标题】:Android - Passing objects between activitiesAndroid - 在活动之间传递对象
【发布时间】:2014-12-08 08:31:08
【问题描述】:

我知道如果我想将自定义对象 O 从 Activity A 发送到 Activity B,我必须使对象 O 实现 Parcelable. 但是,目前我的对象O 有很多不同类型的字段。 在这种情况下,我可以只使用单例吗? 例如,

1. in Activity B, I create a public static Object o;

2. in Activity A, I do
B.o = ObjectToSend;
startActivity(intent for B);

3. in Activity B's onCreate(), I do
O o = B.o;
if o is not null, use o..

这种方法有问题吗? 谢谢

【问题讨论】:

  • 我会劝阻滥用设计模式

标签: android android-intent android-activity


【解决方案1】:

你可以让它序列化吗? (如果是这样,以这个问题为例:Pass serializable object throught intent

如果您真的想使用“静态”方法,我会考虑使用 Application 的子类,它更适合处理应用程序状态,这是您试图传递的内容。如果是这样,谷歌“android自定义应用程序类”,你会得到一些关于使用它的不错的博客和帖子。

Parcelable vs Serializable 上的一个不错的注释

【讨论】:

  • 制作 Parcelable 并不比 Serializable 难多少,它可以防止许多可能出现的问题
  • 正如我所包含的链接所讨论的那样,要使某些东西可序列化,您只需在每个类中添加“implements ..”。要使其可打包,您必须为每个类添加样板类型方法。任何一天,我都会在构造函数和额外方法上使用 2 个单词。
  • 我要传递的对象有以下字段。 HashMap。在这种情况下,我认为我不能使其可打包或可序列化......可以吗?将这个对象设置在 A 的静态单例字段中并从 B 读取它不是更简单吗?
  • 如果你不能更新第 3 方类,我会选择 Application 子类。那将是最干净的方法。使其成为您数据的所有者。
【解决方案2】:

假设没有其他线程可以更改这些变量,它将以这种方式工作,但通常更常见的是将 Singleton 分离到它自己的类中(例如)

public class ObjectSingleton{
    private static ... someobject;

    //getters and setters

}

所以在它周围包裹线程安全代码会更容易。

【讨论】:

    【解决方案3】:

    您可以继承您自己的Application 类,并使您的对象成为该类的字段。只要您的程序正在运行,您的Application 子类就存在,因此您的对象将一直存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 2023-03-23
      • 2013-06-11
      • 1970-01-01
      相关资源
      最近更新 更多