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 是一個空接口,用來標識當前類可以被 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版本當中,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,當然實現(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 Filterable實現(xiàn)Recyclerview篩選功能的示例代碼
這篇文章主要介紹了Android Filterable實現(xiàn)Recyclerview篩選功能的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2021-02-02Android小部件Widget開發(fā)過程中的坑和問題小結(jié)
這篇文章主要介紹了Android小部件Widget開發(fā)過程中的坑和問題小結(jié),本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09零基礎(chǔ)學(xué)習教程之Linux下搭建android開發(fā)環(huán)境
這篇文章主要介紹了Linux下搭建android開發(fā)環(huán)境,特別適合零基礎(chǔ)的同學(xué)學(xué)習,想要在Linux及ubuntu11.10下配置android4.0.3開發(fā)環(huán)境的朋友可以參考一下2015-12-12Android開發(fā)之React Navigation 導(dǎo)航欄樣式調(diào)整+底部角標消息提示
這篇文章主要介紹了React Navigation 導(dǎo)航欄樣式調(diào)整+底部角標消息提示的相關(guān)知識,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-05-05