【Android 组件】 实现数据类的 Parcelable 序列化

Parcelable 是 Android 提供的一种高效的数据序列化机制,用于在不同组件(如 Activity、Service、Fragment)之间 通过 Intent 或 Bundle 传递复杂的数据对象。与 Java 的 Serializable 接口相比,Parcelable 提供了更好的性能,因此在 Android 开发中更推荐使用。

1、优点

  • 高性能:Parcelable 的序列化和反序列化过程比 Serializable 更快,因为它直接操作内存,而不是通过 Java 的反射机制。
  • 类型安全:Parcelable 要求明确指定数据的类型,这使得序列化和反序列化过程更加安全。
  • 与 Android 系统集成良好:Parcelable 是 Android 系统推荐的数据传输方式,适用于跨进程通信(IPC)。

2、添加依赖

  • 在模块的 build.gradle.kt 文件中增加 “kotlin-parcelize” 插件
plugins {
   
   
    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android)
    id("kotlin-parcelize")
}

3、定义数据类

  • 使用 @Parcelize 注解定义一个数据类,并实现 Parcelable 接口
  • @Parcelize 注解会自动生成 Parcelable 接口的实现代码。
  • Parcelable 支持的数据类型包括基本数据类型、String、Parcelable、List、Map<String, Parcelable> 等
  • 数据类中的所有属性都必须是可序列化的。
  • 使用 @Parcelize 注解可以大大简化 Parcelable 的实现,减少样板代码。
package com.android.component.parcelable

import android.os.Parcelable
import kotlinx.parcelize.Parcelize

@Parcelize
data class UserModel(
    val userName: String,
    val age: Int,
    val isBoy: Boolean
): Parcelable

4、序列化和反序列化

(1)Acitivity 之间传递数据

  • FirstActivity 中,将 UserModel 数据对象进行序列化后,通过 Intent 传递给 SecondActivity 。
package com.android.component.parcelable

import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.android.component.databinding.ActivityFirstBinding

class FirstActivity: AppCompatActivity() {
   
   

    private lateinit var viewBinding: ActivityFirstBinding

    override fun onCreate(savedInstanceState: Bundle?) {
   
   
        super.onCreate(savedInstanceState)
        viewBinding = ActivityFirstBinding.inflate(layoutInflater)
        setContentView(viewBinding.root)

        viewBinding.start.setOnClickListener {
   
   
            val userModel = 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值