Android序列化接口Parcelable與Serializable接口對比
Parcelable
優(yōu)點:
- google專門為安卓寫的序列化接口
- 性能好,內(nèi)存開銷小,效率高,寫起來復(fù)雜
缺點:
- 各個機型可能有差異,Parcelable使用會產(chǎn)生差異
- 通訊組件之間(AIDL ,INTENT)的數(shù)據(jù)傳遞,可以使用Parcelable
- 寫入存儲設(shè)備推薦使用Serializable
public class MyParcelable implements Parcelable {
* private int mData;//參數(shù)
* public int describeContents() {//類描述,一般不管他
* return 0;
* }
* public void writeToParcel(Parcel out, int flags) {//序列化 :out寫入?yún)?shù),要注明參數(shù)類型 flag一般默認是0,1代表對象需要返回,不回收
* 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();
* }
* }google官方也是很貼心呀,直接把怎么用放在源碼的注釋里了
Serializable
優(yōu)點:
- java自帶的序列化接口
- Serializable是一個空接口,使用簡單,是一個標識,會給類一個序列化UID
缺點:
- 因為使用的是反射,使用性能差,內(nèi)存開銷大
package java.io;
// Android-added: Notes about serialVersionUID, using serialization judiciously, JSON.
public interface Serializable {
}Serializable 是一個空接口,用來標識當(dāng)前類可以被 ObjectOutputStream序列化,以及被ObjectInputStream反序列化
Parcelable與Serializable的性能比較
- 在內(nèi)存的使用中,Parcelable在性能方面要強于Serializable
- Serializable在序列化操作的時候會產(chǎn)生大量的臨時變量,(原因是使用了反射機制)從而導(dǎo)致GC的頻繁調(diào)用,因此在性能上會稍微遜色
- Parcelable是以Ibinder作為信息載體的,在內(nèi)存上的開銷比較小,因此在內(nèi)存之間進行數(shù)據(jù)傳遞的時候,Android推薦使用Parcelable
- 在讀寫數(shù)據(jù)的時候,Parcelable是在內(nèi)存中直接進行讀寫,而Serializable是通過使用IO流的形式將數(shù)據(jù)讀寫入在硬盤上
- 雖然Parcelable的性能要強于Serializable,但是仍然有特殊的情況需要使用Serializable,而不去使用Parcelable,因為Parcelable無法將數(shù)據(jù)進行持久化,因此在將數(shù)據(jù)保存在磁盤的時候,仍然需要使用后者,因為前者無法很好的將數(shù)據(jù)進行持久化 (原因是在不同的Android版本當(dāng)中,Parcelable可能會不同,因此數(shù)據(jù)的持久化方面仍然是使用Serializable)
總結(jié):
- Java應(yīng)用程序中有Serializable來實現(xiàn)序列化操作
- Android中有Parcelable來實現(xiàn)序列化操作
- 在Android中除了對數(shù)據(jù)持久化的時候需要使用到Serializable來實現(xiàn)序列化操作,其他的時候我們?nèi)匀恍枰褂肞arcelable來實現(xiàn)序列化操作
- 在Android中效率并不是最重要的,而是內(nèi)存, 通過比較Parcelable在效率和內(nèi)存上強于Serializable
個人小建議:
盡管Parcelable實現(xiàn)起來比較復(fù)雜,但是如果我們想要成為一名優(yōu)秀的Android軟件工程師,那么我們就需要勤快一些去實現(xiàn)Parcelable,而不是偷懶與實現(xiàn)Serializable,當(dāng)然實現(xiàn)Serializable也可以
到此這篇關(guān)于Android序列化接口Parcelable與Serializable接口對比的文章就介紹到這了,更多相關(guān)Android Parcelable與Serializable內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android序列化實現(xiàn)接口Serializable與Parcelable詳解
- Android序列化之Parcelable和Serializable的使用詳解
- Android Parcelable與Serializable詳解及區(qū)別
- Android Intent傳遞對象的兩種方法(Serializable,Parcelable)詳細介紹
- Android中Serializable和Parcelable序列化對象詳解
- Android中Intent傳遞對象的兩種方法Serializable,Parcelable
- Android中使用Intent在Activity之間傳遞對象(使用Serializable或者Parcelable)的方法
相關(guān)文章
Android自定義view實現(xiàn)動態(tài)柱狀圖
這篇文章主要為大家詳細介紹了Android自定義view實現(xiàn)動態(tài)柱狀圖的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08
Android實現(xiàn)瘋狂連連看游戲之游戲效果預(yù)覽(一)
這篇文章主要為大家詳細介紹了Android實現(xiàn)瘋狂連連看游戲之游戲的效果預(yù)覽,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
android的RecyclerView實現(xiàn)拖拽排序和側(cè)滑刪除示例
在平時開發(fā)應(yīng)用的時候,經(jīng)常會遇到列表排序、滑動刪除的需求。這篇文章主要介紹了android的RecyclerView實現(xiàn)拖拽排序和側(cè)滑刪除示例,有興趣的可以了解一下。2017-02-02
Android 掃描附近的藍牙設(shè)備并連接藍牙音響的示例
本篇文章主要介紹了Android 掃描附近的藍牙設(shè)備并連接藍牙音響的示例,具有一定的參考價值,有興趣的可以了解一下2017-09-09
Android實現(xiàn)獲取應(yīng)用程序相關(guān)信息列表的方法
這篇文章主要介紹了Android實現(xiàn)獲取應(yīng)用程序相關(guān)信息列表的方法,是應(yīng)用管理器常用的功能,需要的朋友可以參考下2014-07-07
Android自定義View實現(xiàn)廣告信息上下滾動效果
這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)廣告信息上下滾動的具體代碼,感興趣的小伙伴們可以參考一下2016-05-05

