Android中Activity间传递MediaFileModel的最优方式及性能对比
Activity间传递MediaFileModel对象的最优方案及三种方式对比
你的MediaFileModel已经通过@Parcelize实现了Parcelable,这就是Android场景下Activity间传递该对象的最优方案,下面详细对比Parcelable、单例存储、JSON三种方式的性能差异和内存泄漏风险:
性能差异
- Parcelable:Android官方推荐的跨组件序列化方案,基于内存直接读写数据,序列化/反序列化效率最高,没有额外的字符串转换开销,对于自定义数据类的传递是性能最优的选择。
- JSON序列化:需要将对象转换为字符串(比如Gson、Moshi等库),再在目标Activity中解析回对象,中间涉及字符串的编解码操作,性能远低于Parcelable,数据量越大,耗时差距越明显。
- 单例存储:不存在序列化/反序列化的开销,读取速度最快,但这种方式的核心问题不在性能,而在内存管理和数据一致性上。
内存泄漏风险
- Parcelable:几乎无内存泄漏风险。通过Intent传递时,数据会由系统负责传递和回收,传递完成后原对象的引用不会被意外持有,符合组件生命周期的管理逻辑。
- JSON序列化:内存泄漏风险极低。本质是传递字符串,和Parcelable一样,传递完成后不会残留无用的对象引用,不会影响GC回收。
- 单例存储:内存泄漏风险最高。单例的生命周期与应用进程绑定,若将
MediaFileModel存入单例,即使目标Activity已销毁,单例仍会持有对象引用,导致对象无法被GC回收;此外,多个组件共用单例时还可能出现数据覆盖、状态不一致的问题,增加维护成本。
补充说明
如果需要传递的是MediaFileModel的列表,直接使用Intent.putParcelableArrayListExtra()即可,同样高效且安全。只有在极端场景(比如超大量数据传递)下,才需要考虑ViewModel结合SavedStateHandle等替代方案,但对于单张或少量相册照片的传递,Parcelable完全足够。
内容的提问来源于stack exchange,提问作者DucK
相关产品推荐
相关产品推荐

