java - bundle 和 parcelable 的区别

标签 java android

所以我一直在研究如何在 Activity 之间传递数据,我发现有以下三种方式:

1) 直接来自 Intent

2) 可打包

3) bundle

ParcelableBundle 有什么区别?我们什么时候应该使用它们?

最佳答案

  1. > Parcelable是由某个模型类实现的接口(interface)。如果类实现了 Parcelable,则可以从 Parcel 序列化和反序列化此类的实例。 Parcelable 是 java Serializable 接口(interface)的有效 android 模拟。

实现Parcelable的例子:

data class User(val id: Long, val email: String?) : Parcelable {

    constructor(parcel: Parcel) : this(
            parcel.readLong(),
            parcel.readString()) {
    }

    override fun writeToParcel(dest: Parcel, flags: Int) {
        dest.writeLong(id)
        dest.writeString(email)
    }

    override fun describeContents(): Int = 0

    companion object CREATOR : Parcelable.Creator<User> {
        override fun createFromParcel(parcel: Parcel): User {
            return User(parcel)
        }

        override fun newArray(size: Int): Array<User?> {
            return arrayOfNulls(size)
        }
    }
}

在 kotlin 中还有 @Parcelize 注解,它在大多数情况下简化了过程:

@Parcelize
data class User(val id: Long, val email: String?) : Parcelable
  1. Bundle是 android 标准类型命名值的容器(包括 Parcelable),用于在 Activity 、 fragment 和其他 android 应用程序实体之间传递数据。

    val user = User(1L, "email@email.email")
    val bundle = Bundle().apply {
        putLong("userId", user.id)
        putString("userEmail", user.email)
        putParcelable("user", user)
    }
    
    val userId = bundle.getLong("userId")
    val userEmail = bundle.getString("userEmail")
    val user1: User? = bundle.getParcelable("user")
    

关于java - bundle 和 parcelable 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59503841/

相关文章:

安卓应用自更新

java - Jena TDB 使用 API 存储和查询

java - 无法在 child() 中为参数 'pathString' 传递 null

java - Android 应用程序与 PLC 通信

android - 如何在 Android 版 Google 标签管理器中设置 Facebook 分析

java - 在 AlertDialog 中引用多个复选框

java - 使用java更好的GUI设计

java - Hibernate Generated Value 策略

java - JPA 延迟加载性能优势有多重要?

java - 无法为目标加载共享库 'gdx'