前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android中Parcelable的使用详解

Android中Parcelable的使用详解

作者头像
砸漏
发布2020-11-03 16:11:45
1.6K0
发布2020-11-03 16:11:45
举报
文章被收录于专栏:恩蓝脚本恩蓝脚本

Parcelable与Serializable

Serializable是Java为我们提供的一个标准化的序列化接口。

Parcelable是Android为我们提供的序列化的接口。

对比:

1、Parcelable相对于Serializable的使用相对复杂一些。

2、Parcelable的效率相对Serializable也高很多。

3、Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable在外界有变化的情况下不能很好的保证数据的持续性。尽管Serializable效率低点,但此时还是建议使用Serializable。存储到设备或者网络传输上选择Serializable。

序列化与反序列化

序列化:将对象转换为可以传输的二进制流(二进制序列)的过程,这样我们就可以通过序列化,转化为可以在网络传输或者保存到本地的流(序列),从而进行传输数据 。

反序列化:从二进制流(序列)转化为对象的过程。

简单使用:

进行Android开发的时候,无法将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。简单看一下:

1、定义Book类,实现Parcelable接口。

代码语言:javascript
复制
package com.status.mattest;
import android.os.Parcel;
import android.os.Parcelable;
public class Book implements Parcelable {
  private String name;
  private int id;
  private String classify;
  protected Book(Parcel in) {
    name = in.readString();
    classify = in.readString();
    id = in.readInt();
  }
  public Book(String classify, String name, int id) {
    this.name = name;
    this.id = id;
    this.classify = classify;
  }
  /**
   * 反序列化
   */
  public static final Creator<Book  CREATOR = new Creator<Book () {
    @Override
    public Book createFromParcel(Parcel in) {
      return new Book(in);
    }
    @Override
    public Book[] newArray(int size) {
      return new Book[size];
    }
  };
  @Override
  public int describeContents() {
    return 0;
  }
  /**
   * 序列化过程
   *
   * @param dest
   * @param flags
   */
  @Override
  public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(name);
    dest.writeString(classify);
    dest.writeInt(id);
  }
  @Override
  public String toString() {
    return "name : " +
        name + "\"" + "id : " + id + "\"" + "classify" + classify;
  }
}

writeToParcel:序列化过程

Creator与protected Book(Parcel in)配合实现反序列化,转换为对象。

注意:类中有多个String或者其它相同对象的话,那么writeToParcel中writeString的顺序是怎么样的,protected Book(Parcel in) {}中readString的顺序就得是怎么样的。

2、mainActivity中:

代码语言:javascript
复制
textView.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
     Intent intent = new Intent(MainActivity.this, Test1Activity.class);
     intent.putExtra("key", new Book("哈", "鸿", 8));
     startActivity(intent);
   }
 });

3、另一个Activity获取:

代码语言:javascript
复制
 Intent intent = getIntent();
 Book book = intent.getParcelableExtra("key");
 Log.d("Test1Activity", book.toString());

输出:

——————————————————————————–

Book类里面有其它对象:

如果Book类里面有其他对象(比如实体类Data)的话,那么Data也需要实现Parcelable接口,用法与上面的Book类一样。

writeToParcel里面需要写上:dest.writeParcelable(data, 0);

protected Book(Parcel in) {}里面需要写上data = in.readParcelable(Data.class.getClassLoader());

总结

以上所述是小编给大家介绍的Android中Parcelable的使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ZaLou.Cn网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档