使用Intent传递对象
使用 Intent 传递对象的几种方式(Android)
在 Android 开发中,Intent
是启动 Activity、Service 等组件的关键工具,同时也是在组件间传递数据的重要桥梁。
本文介绍如何通过 Intent
安全、高效地传递自定义对象,包括:
Serializable
方式Parcelable
方式(推荐)- 使用
Bundle
传递对象 - JSON 字符串传递对象(配合 Gson 等库)
1. 使用 Serializable 接口(简单但性能较差)
步骤 1:让类实现 Serializable
1 | import java.io.Serializable |
步骤 2:通过 Intent 传递
发送端:
1 | val user = User("Alice", 25) |
接收端:
1 | val user = intent.getSerializableExtra("user") as? User |
✅ 优点: 简单,适合快速测试
❌ 缺点: 性能差,不适合大对象或频繁传递
2. 使用 Parcelable 接口(推荐方式)
步骤 1:实现 Parcelable
Kotlin 使用插件自动生成非常方便:
1 | @Parcelize |
需要在
build.gradle
中启用:
1 | plugins { |
步骤 2:通过 Intent 传递
发送端:
1 | val user = User("Bob", 30) |
接收端:
1 | val user = intent.getParcelableExtra<User>("user") |
✅ 优点: 高性能、Android 原生支持
✅ 适用场景: 数据类、列表对象、频繁传递的数据结构
3. 使用 Bundle 传递对象
可以将对象先封装进 Bundle,再通过 Intent 传递:
1 | val bundle = Bundle() |
接收:
1 | val user = intent.extras?.getParcelable<User>("user") |
适合需要封装多个参数或复用 Bundle 的场景。
4. 使用 JSON 字符串传递对象(跨模块推荐)
适用于不能使用 Parcelable 的场景(如跨模块传输、第三方库对象等):
使用 Gson:
1 | val json = Gson().toJson(user) |
接收端:
1 | val json = intent.getStringExtra("user_json") |
✅ 优点: 灵活,适合传输复杂结构
❌ 缺点: 需要额外序列化/反序列化,性能略低
小结
方法 | 是否推荐 | 特点 |
---|---|---|
Serializable | ❌ 不推荐 | 实现简单,性能差 |
Parcelable | ✅ 推荐 | 官方推荐,高效 |
Bundle | ✅ 推荐 | 可组合多个参数 |
JSON 字符串 | ✅ 特殊场景推荐 | 灵活,适合跨模块或跨平台 |
最佳实践
- 数据类使用
@Parcelize
自动生成 Parcelable,最简洁 - 跨模块或使用非自定义类时使用 JSON 字符串
- 避免在 Intent 中传递过大的对象(>1MB),会引发异常
- 在多参数传递时,推荐使用 Bundle 封装
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.