2

要将任何对象的意图从一个活动发送到另一个活动,我们可以使用 Parcelable 接口或 Serializable 接口。两者有什么区别?哪个更适合使用?

此外,我们可以发送字符串、整数类型的对象,而无需使用所有这些接口。怎么可能?

4

4 回答 4

3

Java Serializable: Serializable 来自标准 Java,实现起来要容易得多,您需要做的就是实现 Serializable 接口并添加覆盖两个方法。

  private void writeObject(java.io.ObjectOutputStream out)
              throws IOException 
  private void readObject(java.io.ObjectInputStream in)
              throws IOException, ClassNotFoundException

Serializable 的问题在于它试图适当地处理阳光下的一切,并使用大量反射来确定正在序列化的类型。所以它变成了一个强壮的对象

Androids Parcelable: Android 进程间通信 (AIPC) 文件,用于告诉 Android 应该如何编组和解组您的对象。它不那么通用,不使用反射,因此它应该有更少的开销和更快的速度。

于 2012-08-07T10:05:54.847 回答
2

您可以发送 String、Integer 等数据类型,以及实现 Parcelable 接口的类的对象,如下所示...

Intent intent = new Intent(CallingActivity.this, CalledActivity.class);
intent.putExtra("IntegerExtra", intValue);
intent.putExtra("StringExtra", stringValue);
intent.putExtra("ParcExtra", parcObject);
startActivity(intent);

而且,在接收端,您可以编写以下代码,

intValue = getIntent().getIntExtra("IntegerExtra", 0);
stringValue = getIntent().getStringExtra("StringExtra");    
parcObject = ((YourParcalabeDataType) getIntent().getParcelableExtra("ParcExtra"));

希望这可以解决您的问题... :)

于 2012-08-07T10:25:52.123 回答
0

与发送对象相比,仅发送指向您的内容的 URI 可能更容易。这将简化发送并消除发送对象的需要,因为理想情况下 URI 将指向您感兴趣的内容。当然这取决于您尝试传递的内容。

于 2012-08-07T10:03:12.150 回答
0

您可以从该链接找到 Parcelable 和 Serializable 接口之间的区别。基本上 Parcelable 是为 android 创建的,比 Serializable 效率高得多。

您可以通过使用 Bundles 并将这些包链接到意图来简单地发送字符串或整数。

Intent i = new Intent(getApplicationContext(),YourClass.class);
Bundle b = new Bundle();
b.putString("string", "string");
i.putExtras(b);
startActivity(i);
于 2012-08-07T10:12:15.907 回答