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 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 解析

更多相关文章

  1. android缓存框架ASimpleCache
  2. GreenDao的更新,不会使数据删除所导致重新创建新表的示例
  3. Android应用程序获取system权限
  4. Android程序优化之异常终止数据恢复
  5. android 手机UDP 接受不到数据
  6. android与其他应用的交互
  7. android跟服务器使用json传递数据
  8. Android获取手机SIM卡运营商信息的方法
  9. GreenDao 3.3.0 基本使用与入门 (一)

随机推荐

  1. WebView 简单使用一
  2. layout_weight 权重
  3. Android各版本对应的SDK版本
  4. 使用Android studio导入源码工程
  5. 高通平台Android N SystemUI添加qcnvitem
  6. Android强制设置横屏或竖屏
  7. Android 控件抖动效果
  8. Android Studio第二十七期 - RecycleView
  9. Android ViewFlipper简单示例
  10. Android 权限添加