Android开发中为何使用putExtra()而非直接调用属性?
putExtra()传递Activity数据而非直接访问public属性? 这个问题问到点子上了——这背后完全是Android系统的架构设计和组件通信原则在主导,我来给你拆解下核心原因:
组件生命周期的系统管控特性
Android的Activity实例不是你想new就new的,绝大多数场景下是由系统根据生命周期规则创建、销毁和重建的。如果直接用public属性传递数据,当系统因内存不足等原因销毁目标Activity后重建时,这些public属性的值会丢失;而Intent中的extras会被系统自动保存和恢复,因为Intent是启动组件的核心凭证,系统会负责持久化它携带的数据。松耦合的组件设计要求
直接访问目标Activity的public属性会让两个组件紧耦合:你必须知晓目标Activity的具体类名、属性名,一旦目标Activity修改了这些细节,调用方代码就得跟着改。而用putExtra()只需要约定好数据的key,双方通过key存取数据,耦合度大幅降低,也更符合面向对象的封装原则。系统统一的组件通信规范
Android的四大组件(Activity、Service、BroadcastReceiver等)之间的通信都是基于Intent完成的,这是系统规定的统一接口。比如你要调用系统相册、相机这类第三方App的Activity,根本不可能访问它们的public属性,只能通过Intent的extras传递符合对方约定的数据——这也是跨App通信的唯一可行方式。序列化与类型安全保障
putExtra()支持的所有数据类型(基本类型、Parcelable、Serializable等)都经过系统的序列化处理,能确保数据在组件间(甚至跨进程)传递时正确序列化和反序列化。如果直接用public属性传递未实现序列化的对象,在Activity重建或跨进程场景下必然会抛出异常,系统也不会帮你处理这类问题。安全性与权限控制
通过Intent传递数据时,你可以配合权限设置来限制哪些组件能接收这些数据;而直接暴露public属性,任何能获取到Activity实例的代码都可以随意修改它,在多进程或有外部调用的场景下,安全性会大打折扣。
简单来说,putExtra()是Android组件模型下的最优选择——既贴合系统的设计逻辑,又保证了组件通信的可靠性、灵活性和安全性。
内容的提问来源于stack exchange,提问作者shoushouleb86

