返回顶部
首页 > 资讯 > 精选 >Android中如何使用Parcelable接口
  • 311
分享到

Android中如何使用Parcelable接口

androidparcelable 2023-05-30 21:05:33 311人浏览 八月长安
摘要

Android中如何使用Parcelable接口,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 Android Parcelable接口使用方法详解1

Android中如何使用Parcelable接口,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

 Android Parcelable接口使用方法详解

1. Parcelable接口

Interface for classes whose instances can be written to and restored from a Parcel。 Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementing the Parcelable.Creator interface。

2.实现Parcelable就是为了进行序列化,那么,为什么要序列化?

1)永久性保存对象,保存对象的字节序列到本地文件中;
2)通过序列化对象在网络中传递对象;
3)通过序列化在进程间传递对象。

3.实现序列化的方法

Android中实现序列化有两个选择:一是实现Serializable接口(是JavaSE本身就支持的),一是实现Parcelable接口(是android特有功能,效率比实现Serializable接口高效,可用于Intent数据传递,也可以用于进程间通信(IPC))。实现Serializable接口非常简单,声明一下就可以了,而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。

注:Android中Intent传递对象有两种方法:一是Bundle.putSerializable(Key,Object),另一种是Bundle.putParcelable(Key,Object)。当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口。

4.选择序列化方法的原则

1)在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。
2)Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC
3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点,但此时还是建议使用Serializable 。

5.应用场景

需要在多个部件(Activity或Service)之间通过Intent传递一些数据,简单类型(如:数字、字符串)的可以直接放入Intent。复杂类型必须实现Parcelable接口。

6、Parcelable接口定义

public interface Parcelable {  //内容描述接口,基本不用管  public int describeContents();  //写入接口函数,打包  public void writeToParcel(Parcel dest, int flags);  //读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。因为实现类在这里还是不可知的,所以需要用到模板的方式,继承类名通过模板参数传入  //为了能够实现模板参数的传入,这里定义Creator嵌入接口,内含两个接口函数分别返回单个和多个继承类实例  public interface Creator<T>   {      public T createFromParcel(Parcel source);      public T[] newArray(int size);  }}

7、实现Parcelable步骤

1)implements Parcelable
2)重写writeToParcel方法,将你的对象序列化为一个Parcel对象,即:将类的数据写入外部提供的Parcel中,打包需要传递的数据到Parcel容器保存,以便从 Parcel容器获取数据
3)重写describeContents方法,内容接口描述,默认返回0就可以
4)实例化静态内部对象CREATOR实现接口Parcelable.Creator

public static final Parcelable.Creator<T> CREATOR

注:其中public static final一个都不能少,内部对象CREATOR的名称也不能改变,必须全部大写。需重写本接口中的两个方法:createFromParcel(Parcel in) 实现从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层,newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话即可(return new T[size]),供外部类反序列化本类数组使用。

简而言之:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象。也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。

代码如下:

public class MyParcelable implements Parcelable {   private int mData;   public int describeContents()    {     return 0;   }   public void writeToParcel(Parcel out, int flags)    {     out.writeInt(mData);   }   public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>()    {     public MyParcelable createFromParcel(Parcel in)      {       return new MyParcelable(in);     }     public MyParcelable[] newArray(int size)      {       return new MyParcelable[size];     }   };      private MyParcelable(Parcel in)    {     mData = in.readInt();   } }

8、Serializable实现与Parcelabel实现的区别

1)Serializable的实现,只需要implements  Serializable 即可。这只是给对象打了一个标记,系统会自动将其序列化。

2)Parcelabel的实现,不仅需要implements  Parcelabel,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator 接口。

两者代码比较:

1)创建Person类,实现Serializable

public class Person implements Serializable{  private static final long serialVersionUID = -7060210544600464481L;  private String name;  private int age;    public String getName()  {    return name;  }    public void setName(String name)  {    this.name = name;  }    public int getAge()  {    return age;  }    public void setAge(int age)  {    this.age = age;  }}

2)创建Book类,实现Parcelable

public class Book implements Parcelable{  private String bookName;  private String author;  private int publishDate;    public Book()  {      }    public String getBookName()  {    return bookName;  }    public void setBookName(String bookName)  {    this.bookName = bookName;  }    public String getAuthor()  {    return author;  }    public void setAuthor(String author)  {    this.author = author;  }    public int getPublishDate()  {    return publishDate;  }    public void setPublishDate(int publishDate)  {    this.publishDate = publishDate;  }    @Override  public int describeContents()  {    return 0;  }    @Override  public void writeToParcel(Parcel out, int flags)  {    out.writeString(bookName);    out.writeString(author);    out.writeInt(publishDate);  }    public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>()  {    @Override    public Book[] newArray(int size)    {      return new Book[size];    }        @Override    public Book createFromParcel(Parcel in)    {      return new Book(in);    }  };    public Book(Parcel in)  {    bookName = in.readString();    author = in.readString();    publishDate = in.readInt();  }}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: Android中如何使用Parcelable接口

本文链接: https://lsjlt.com/news/221363.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android中如何使用Parcelable接口
    Android中如何使用Parcelable接口,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 Android Parcelable接口使用方法详解1...
    99+
    2023-05-30
    android parcelable
  • Android序列化接口Parcelable与Serializable接口对比
    目录ParcelableSerializableParcelable与Serializable的性能比较Parcelable 优点: google专门为安卓写的序列化接口性能好,内存...
    99+
    2023-02-07
    Android Parcelable Android Serializable Android序列化接口
  • Android序列化实现接口Serializable与Parcelable详解
    目录一、Serializable(对象)二、Parcelable(属性)2.1 实现方式(不推荐)2.2 注解方式(推荐)一、Serializable(对象) 只需要实现Serial...
    99+
    2022-12-08
    Android Serializable与Parcelable Android 序列化接口
  • Spring中如何使用Comparator接口
    我们先来回顾下Comparator接口在我们日常开发中的作用,Comparator比较器接口可以将自身传递给排序方法(比如Collections.sort或Arrays.sort),...
    99+
    2024-04-02
  • VB.NET中如何使用IDisplayer接口
    本篇文章为大家展示了VB.NET中如何使用IDisplayer接口,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。VB.NET还是比较常用的,于是我研究了一下VB.NET IDisplayer接口,在...
    99+
    2023-06-17
  • Python中如何使用UNIX接口?
    Python作为一种高级编程语言,具有广泛的应用场景。它不仅可以完成各种编程任务,还可以与底层系统进行交互。本文将详细介绍Python中如何使用UNIX接口。 一、UNIX接口简介 UNIX接口是一种底层接口,它提供了与操作系统进行交互的方...
    99+
    2023-09-03
    load unix 接口
  • 如何在PHP中使用WebService接口
    这篇文章将为大家详细讲解有关如何在PHP中使用WebService接口,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。php有什么特点1、执行速度快。2、具有很好的开放性和可扩展性。3、PHP...
    99+
    2023-06-14
  • 如何在php中使用Laravel接口
    如何在php中使用Laravel接口?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。php是什么语言php,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypert...
    99+
    2023-06-14
  • 如何在Java中使用RESTful接口
    如何在Java中使用RESTful接口?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、什么是APIAPI (应用程序编程接口) 两种用法类似jar的使用:A软件将功能打包...
    99+
    2023-06-15
  • java中如何使用HttpClient调用接口
    目录java使用HttpClient调用接口HttpClient 提供的主要的功能直接言归正传了!!!!上代码java的HttpClient调用远程接口使用方法实例java使用Htt...
    99+
    2022-11-13
    java使用HttpClient HttpClient调用接口 java HttpClient
  • 如何使用Comparable接口
    这篇文章主要介绍“如何使用Comparable接口”,在日常操作中,相信很多人在如何使用Comparable接口问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Comparable接口”的疑惑有所帮助!...
    99+
    2023-06-17
  • Java中如何打包接口,JavaScript中如何使用?
    Java是一种广泛使用的编程语言,主要用于开发企业级应用程序。在Java中,打包是将一组相关的类和接口组织在一起的过程,以便于在不同的应用程序中重用。在本文中,我们将介绍如何打包Java接口,并在JavaScript中使用它们。 一、Ja...
    99+
    2023-08-03
    打包 接口 javascript
  • GO语言中接口和接口型函数如何使用
    这篇文章主要讲解了“GO语言中接口和接口型函数如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“GO语言中接口和接口型函数如何使用”吧!// A Getter&nbs...
    99+
    2023-07-05
  • Android中回调接口的使用介绍
    MainActivity如下: 代码如下: package cn.testcallback; import android.os.Bundle; import android...
    99+
    2022-06-06
    回调 接口 Android
  • VisualC#中如何使用IComparable和IComparer接口
    目录概要IComparable 接口IComparer 接口逐步讲解的示例:本文同时讨论了IComparable和IComparer接口,原因有两点。这两个接口经常一起使用。虽然接口...
    99+
    2023-05-18
    C# IComparable和IComparer接口 C# IComparer接口
  • 如何在thinkphp5.1中写接口及接口调用
    在thinkphp5.1中如何写接口及如何调用接口 对于php不熟悉的人来说,解除thinkphp还是挺有难度的。 下面记录如何编写接口。 及如何对编写的接口进行调用。 1.首先在thinkphp中的application中的api/co...
    99+
    2023-09-01
    php
  • 如何在java中使用SPI定义接口
    这篇文章给大家介绍如何在java中使用SPI定义接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列:有序,可重复的...
    99+
    2023-06-14
  • Python中如何使用requests做接口测试
    这篇文章主要介绍了Python中如何使用requests做接口测试,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、介绍Requests是一个很实用的Python HTTP客...
    99+
    2023-06-15
  • JNI本地接口如何在Java中使用
    这篇文章将为大家详细讲解有关JNI本地接口如何在Java中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。详解Java 本地接口 JNI 使用方法对于Java程序员来说,Java语言的好处...
    99+
    2023-05-31
    java jni ava
  • ASP中如何使用数组打包接口?
    在ASP中,使用数组打包接口是一个非常常见的需求。在本文中,我们将介绍如何使用数组打包接口,并提供一些示例代码,以便您更好地了解如何在ASP中使用数组打包接口。 什么是数组打包接口? 数组打包接口是指将多个参数打包成一个数组,并将该数组作...
    99+
    2023-07-31
    数组 打包 接口
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作