Android putSerializable 与 putString

标签 android android-intent serializable

我有一个定义如下的 POJO 对象:

public class MYPOJO implements Serializable {

    int myint;
    String mystring;
}

然后当我将信息传递给 Activity 时,我会这样做:

Intent i = new Intent(this, WearActivity.class);
        Bundle b = new Bundle();
        MYPojo pojo = new MYPojo();
        pojo.mystring="cool";
        b.putSerializable("someString", pojo.mystring);//this line is my issue
        i.putExtra("coolBundle",b);

        startActivityForResult(i, 0);

并阅读额外的“someString”:

Bundle b2 = getIntent().getBundleExtra("coolBundle");
        b2.getString("someString");

现在我的问题是:如果我在最后仍然调用检索 b2.getString("someString") 时执行以下操作真的有什么不同吗:

b.putString("someString",pojo.mystring) 

对比

b.putSerializable("someString",pojo.mystring) ?

最佳答案

在实践中,除了“效率”或可能使用的反射/安全性之外,在 Activity 之间传递字符串或传递可序列化字符串之间没有区别。这可能更多的是我将字符串作为“可序列化”传递时遇到的设计和原则问题。本质上,通过将 String 作为 Serializable 传递,Android/Java 将利用 String 的包装器,它在幕后包含 char[] 数据结构。

TLDR;如果您的 POJO 包含更多数据,我强烈建议您实现 Parcelable。可以在此 SO 答案中找到更多信息 here .但是,如果您只传递一个字符串,我会使用 Android 为我们提供的 putString/getString 方法。

关于Android putSerializable 与 putString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32125960/

相关文章:

android - 无法解析 : com. android.support :customtabs:[26. 0.0,26.1.0]

android - Dagger 和 mvp - 演示者是否应该使用 dagger 进行注入(inject)

android - 如何从 Activity 到 fragment

android - 如何将 byte[] 列表传递给另一个 Activity

java - 确保函数参数可序列化的最佳方法是什么?

android - 在折叠时将图像设置为标题 CollapsingToolbarLayout

android - 具有相同 sharedUserId 的应用程序之间的 Sharedpreference

安卓工作室 : Back Button for previous Activity

java - 是否可以将任何实现 java.io.serializable 的类添加到泛型 <Serializable> 的数组列表中

java - Java中的可序列化和可外部化有什么区别?