【问题标题】:Passing Parcelable/Serializable vs Passing object's data members传递 Parcelable/Serializable 与传递对象的数据成员
【发布时间】:2014-11-05 17:08:10
【问题描述】:

我试图找出在 android 中将对象从一个活动传递到另一个活动的最有效方法是什么。我读到我可以将对象扩展为 Parcelable 或 Serializable,看起来 Parcelable 在性能方面是明显的赢家。

现在我只是想了一个不同的方法。我不会扩展任何类,而是将所有数据变量放入一个包中,传递这些数据,然后重构对象。例如:

public class myObject {
   // Data Variables
   private String str1;
   private String str2;
   private boolean bool1;

   // Constructor
   public myObject(String str1, String str2, boolean bool1){
      this.str1 = str1;
      this.str2 = str2;
      this.bool1 = bool1;
   }
}

现在我将只传递变量:

Intent i = new Intent();
i.setClass(ActOne.this, ActTwo.class);
Bundle bundle = new Bundle();
bundle.putString("KEY_STR1", str1);
bundle.putString("KEY_STR2", str2);
bundle.putBoolean("KEY_BOOL1", bool1);
startActivity(i);

在 ActTwo 类中,我将从意图中获取数据并重建我的对象:

myObject newObjHolder = new myObject(str1, str2, bool1);

这种方式与传递 Parcelable 相比如何?快点?慢点?几乎没有区别?

【问题讨论】:

  • 同样的事情。在内部,您在包裹对象中写入和读取。
  • 要添加另一种方法,如果您在多个活动之间共享相同的对象,您可能希望使用单例方法而不是传递它们。
  • 单例存在状态不确定性问题。因此,您可能会发现类方法的输出令人毛骨悚然……无法确定。

标签: java android serialization bundle parcelable


【解决方案1】:

如果您仔细观察,您会发现 Bundle 无论如何都只是一个 Parcelable。 因此,您可能正在研究一对夫妇,但非常非常小,以您建议的方式执行效率要低几毫秒。

我会告诉你原因: Parcelables 必须写入 Parcel 并且您正在写入 Bundle,然后此 Bundle 会将其写入 Parcel。所以你确实增加了一些开销,但也许你可以做一个类似于@bhowden 指向的链接的测试,看看它会非常小。

那么你必须决定是喜欢Bundle的简单代码还是Parcelable的速度。

【讨论】:

    猜你喜欢
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2021-12-15
    • 2013-12-26
    • 1970-01-01
    • 2019-02-09
    相关资源
    最近更新 更多