欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Android中如何使用Parcelable接口-創(chuàng)新互聯(lián)

Android中如何使用Parcelable接口,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司是專業(yè)的西鄉(xiāng)塘網(wǎng)站建設(shè)公司,西鄉(xiāng)塘接單;提供成都網(wǎng)站制作、網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行西鄉(xiāng)塘網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

 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.實現(xiàn)Parcelable就是為了進(jìn)行序列化,那么,為什么要序列化?

1)永久性保存對象,保存對象的字節(jié)序列到本地文件中;
2)通過序列化對象在網(wǎng)絡(luò)中傳遞對象;
3)通過序列化在進(jìn)程間傳遞對象。

3.實現(xiàn)序列化的方法

Android中實現(xiàn)序列化有兩個選擇:一是實現(xiàn)Serializable接口(是JavaSE本身就支持的),一是實現(xiàn)Parcelable接口(是android特有功能,效率比實現(xiàn)Serializable接口高效,可用于Intent數(shù)據(jù)傳遞,也可以用于進(jìn)程間通信(IPC))。實現(xiàn)Serializable接口非常簡單,聲明一下就可以了,而實現(xiàn)Parcelable接口稍微復(fù)雜一些,但效率更高,推薦用這種方法提高性能。

注:Android中Intent傳遞對象有兩種方法:一是Bundle.putSerializable(Key,Object),另一種是Bundle.putParcelable(Key,Object)。當(dāng)然這些Object是有一定的條件的,前者是實現(xiàn)了Serializable接口,而后者是實現(xiàn)了Parcelable接口。

4.選擇序列化方法的原則

1)在使用內(nèi)存的時候,Parcelable比Serializable性能高,所以推薦使用Parcelable。
2)Serializable在序列化的時候會產(chǎn)生大量的臨時變量,從而引起頻繁的GC。
3)Parcelable不能使用在要將數(shù)據(jù)存儲在磁盤上的情況,因為Parcelable不能很好的保證數(shù)據(jù)的持續(xù)性在外界有變化的情況下。盡管Serializable效率低點,但此時還是建議使用Serializable 。

5.應(yīng)用場景

需要在多個部件(Activity或Service)之間通過Intent傳遞一些數(shù)據(jù),簡單類型(如:數(shù)字、字符串)的可以直接放入Intent。復(fù)雜類型必須實現(xiàn)Parcelable接口。

6、Parcelable接口定義

public interface Parcelable 
{
  //內(nèi)容描述接口,基本不用管
  public int describeContents();
  //寫入接口函數(shù),打包
  public void writeToParcel(Parcel dest, int flags);
  //讀取接口,目的是要從Parcel中構(gòu)造一個實現(xiàn)了Parcelable的類的實例處理。因為實現(xiàn)類在這里還是不可知的,所以需要用到模板的方式,繼承類名通過模板參數(shù)傳入
  //為了能夠?qū)崿F(xiàn)模板參數(shù)的傳入,這里定義Creator嵌入接口,內(nèi)含兩個接口函數(shù)分別返回單個和多個繼承類實例
  public interface Creator<T> 
  {
      public T createFromParcel(Parcel source);
      public T[] newArray(int size);
  }
}

7、實現(xiàn)Parcelable步驟

1)implements Parcelable
2)重寫writeToParcel方法,將你的對象序列化為一個Parcel對象,即:將類的數(shù)據(jù)寫入外部提供的Parcel中,打包需要傳遞的數(shù)據(jù)到Parcel容器保存,以便從 Parcel容器獲取數(shù)據(jù)
3)重寫describeContents方法,內(nèi)容接口描述,默認(rèn)返回0就可以
4)實例化靜態(tài)內(nèi)部對象CREATOR實現(xiàn)接口Parcelable.Creator

public static final Parcelable.Creator<T> CREATOR

注:其中public static final一個都不能少,內(nèi)部對象CREATOR的名稱也不能改變,必須全部大寫。需重寫本接口中的兩個方法:createFromParcel(Parcel in) 實現(xiàn)從Parcel容器中讀取傳遞數(shù)據(jù)值,封裝成Parcelable對象返回邏輯層,newArray(int size) 創(chuàng)建一個類型為T,長度為size的數(shù)組,僅一句話即可(return new T[size]),供外部類反序列化本類數(shù)組使用。

簡而言之:通過writeToParcel將你的對象映射成Parcel對象,再通過createFromParcel將Parcel對象映射成你的對象。也可以將Parcel看成是一個流,通過writeToParcel把對象寫到流里面,在通過createFromParcel從流里讀取對象,只不過這個過程需要你來實現(xiàn),因此寫的順序和讀的順序必須一致。

代碼如下:

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實現(xiàn)與Parcelabel實現(xiàn)的區(qū)別

1)Serializable的實現(xiàn),只需要implements  Serializable 即可。這只是給對象打了一個標(biāo)記,系統(tǒng)會自動將其序列化。

2)Parcelabel的實現(xiàn),不僅需要implements  Parcelabel,還需要在類中添加一個靜態(tài)成員變量CREATOR,這個變量需要實現(xiàn) Parcelable.Creator 接口。

兩者代碼比較:

1)創(chuàng)建Person類,實現(xiàn)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)創(chuàng)建Book類,實現(xiàn)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();
  }
}

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

分享文章:Android中如何使用Parcelable接口-創(chuàng)新互聯(lián)
本文鏈接:http://aaarwkj.com/article30/cdppso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版定制開發(fā)、關(guān)鍵詞優(yōu)化網(wǎng)站設(shè)計公司、網(wǎng)站營銷、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
一区二区欧美日韩91| 亚洲午夜黄色生活片观看| 国产精品一区二区激情视频| 熟妇高潮一区二区在线观看| 中文字幕av不卡一区| 国产精品午夜福利天堂| 精品国产乱码久久蜜桃| 精品嫩模福利一区二区蜜臀| 国产老熟女不带套91| 91精品人妻一区二区| 亚洲av第一区综合激情久久久| 中文字幕乱码亚州精品一区| av天堂资源在线播放| 国产精品大片久久激情四射| 夜夜操狠狠操天天摸| 人妻鲁丝一区二区三区| 国产一区二区在线不卡播放| 亚洲av成人在线播放| 亚洲人成伊人成综合网中文| 亚洲精品一区二区免费看| 丰满少妇被激烈的插进去| 熟女精品国产一区二区三区 | 国产精品免费视频一区二区三区| 欧美亚洲成人免费电影| 少妇内射呻吟中文字幕视频| 欧美日韩欧美黄色三级| 亚洲精品国产av一区| 中文人妻熟妇乱又伦精品| 亚洲欧美日韩国产在线一区| 69人妻一区二区三区蜜桃| 亚洲精品国产av成人| 亚洲欧美激情国产综合久久| 国产精品欧美日韩中文| 欧美日韩亚洲视频二区| 日韩一区二区三区av| av成人资源一区久久| 欧美一区二区三区高清正版| 高清欧美大片免费观看| 亚洲欧美一区二区中文字幕| 亚洲伊人成综合人影院| 国产黄片自拍视频免费看|