美文网首页Android 知识碎片
Android 不得不知 之 Serializable 与 P

Android 不得不知 之 Serializable 与 P

作者: 老林不跌面儿 | 来源:发表于2017-10-30 12:51 被阅读3次

    Android 不得不知 之 Bundles
    两个 Activity 之间传递数据,这是我们经常需要的,有同学可能会想到 Serializable 序列化后通过bundle打包传递。通过查看 Android Api我们可以发现,在Bundle 类中有这几个方法:

    public void putSerializable(String key, Serializable value)   
    public Serializable getSerializable(String key)
    

    再看后会发现

    public void putParcelable(String key, Parcelable value)
    public <T extends Parcelable> T getParcelable(String key)
    

    哦,难道通过 Parcelable 也可以实现?答案是肯定的。

    • 两者的设计初衷:
    1. Serializable 的作用是为了保存对象的属性到本地文件、数据库、网络流等以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。
    2. Parcelable 的设计初衷是因为Serializable 效率过慢,为了在程序内不同组件间以及不同 Android 程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,而且 Parcelable 是通过 IBinder 通信的消息的载体。
    • 两者的区别:
    1. 在使用内存的时候,Parcelable 类比 Serializable 性能高。
    2. Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
    3. Parcelable不能适用在要将数据存储在磁盘上的情况,因为Parcelable 在外界有变化的情况下,不能很好的保证数据的持续性。
    • 适用场景:
    1. 只在内存中操作数据时,比如两个 Activity 之间 传输数据。
    2. 需要持久化数据时,比如需要将数据保存的本地文件、数据库,所以尽管 Serializable 效率低点, 也不提倡用,但在这种情况下,还是建议你用 Serializable 。

    有关 Parcelable 的实现,可以移步 Android parcelable 解析

    相关文章

      网友评论

        本文标题:Android 不得不知 之 Serializable 与 P

        本文链接:https://www.haomeiwen.com/subject/qhuppxtx.html