为什么安卓使用包裹在组件之间传递数据



为什么 Android 使用包裹在组件之间传递数据(例如两个活动(?为什么不只是对对象的引用?

Parcel是消息(数据和对象引用(的容器。在传输中,Parcel包含所选 Java Object的字节流版本,其中包含有关其属性的信息。此类数据在发送组件写入Parcel,并在接收组件读取。由于该协议还设计为支持 IPC(进程间通信(,因此仅引用是不够的。如果你真的想只使用一个引用,你可以声明你的对象包含数据public static,尽管我不建议这样做,因为全局范围和组件的紧密耦合。

如果我们查看在活动之间共享数据的常见方法,我们可以合理地猜测为什么会这样。

替代方案包括使用单例和SharedPreferences - 基本上充当数据存储的状态的"所有者"的实体。与简单地相互提供参考的活动相比,使用第三方可以使活动分离。

我们希望活动分离,因为任何两个活动都应该是相当不同的实体,具有可能独立的生命周期。这就是为什么如果我们可以简单地按值传递信息(而不是保留实时引用依赖项(,我们应该这样做。这也是为什么它可以与进程间通信相媲美,后者解决了共享内存不足的问题。

最新更新