Android序列化實現(xiàn)接口Serializable與Parcelable詳解
一、Serializable(對象)
只需要實現(xiàn)Serializable 接口即可。將一個對象序列化轉換成可存儲或傳輸?shù)臓顟B(tài),然后再強轉回來使用(反序列化)。
class Person : Serializable { var name = "" var age = 0 } //傳遞 OneActivity { val person = Person().apply { name = "張三" age = 18 } Intent(this, TwoActivity::class.java).also { it.putExtra("person", person) startActivity(it) } } //獲取 TwoActivity { val person = intent.getSerializableExtra("person") as Person //反序列化成對象 }
二、Parcelable(屬性)
將一個對象進行分解,分解后的每一個屬性都是Intent 所支持的數(shù)據(jù)類型。
2.1 實現(xiàn)方式(不推薦)
創(chuàng)建一個類實現(xiàn) Parcelable 接口,定義好屬性,按 ctrl+1 編譯器會自動幫我們生成。
- 實現(xiàn) Parcelable 接口,重寫 describeContents() 和 writeToParcel() 兩個函數(shù)。describeContents() 直接返回 0 就行。writeToParcel() 調(diào)用 writeXXX() 將類中屬性一一寫入。
- 創(chuàng)建一個名為 CREATOR 的伴生對象實現(xiàn) Parcelable.Creator 接口,將泛型類型指定為<Person>,重寫 createFromParcel() 和 newArray() 兩個函數(shù)。createFromParcel()中創(chuàng)建一個 Person 對象返回,并調(diào)用 readXXX() 將之前寫入的屬性一一讀出(注意讀寫的順序要一致)。newArray()中調(diào)用 arrayOfNulls() 傳入形參 size 作為數(shù)組大小即可。
class Person() : Parcelable { var name = "" var age = 0 constructor(parcel: Parcel) : this() { //讀出 name = parcel.readString() ?: "" age = parcel.readInt() } //寫入 override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeString(name) parcel.writeInt(age) } //返回0就行 override fun describeContents(): Int { return 0 } //伴生對象實現(xiàn)接口 companion object CREATOR : Parcelable.Creator<Person> { //返回對象 override fun createFromParcel(parcel: Parcel): Person { return Person(parcel) } //返回一個數(shù)組,形參 size 作為數(shù)組大小 override fun newArray(size: Int): Array<Person?> { return arrayOfNulls(size) } } } //傳遞方式和 Serializable 一樣,使用如下: TwoActivity { val person = intent.getParcelableExtra("person") }
2.2 注解方式(推薦)
Kotlin提供了更簡便的寫法,傳遞的屬性都需要定義在主構造中。
//Module Gradle 引入插件 plugins { id 'kotlin-parcelize' } //使用 @Parcelize class Person(val name: String, var age: Int) : Parcelable
到此這篇關于Android序列化實現(xiàn)接口Serializable與Parcelable詳解的文章就介紹到這了,更多相關Android Serializable與Parcelable內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android ListView適配器(Adapter)優(yōu)化方法詳解
這篇文章主要介紹了Android ListView優(yōu)化方法詳解的相關資料,這里舉例說明該如何對ListView 進行優(yōu)化,具有一定的參考價值,需要的朋友可以參考下2016-11-11Android自定義TextView實現(xiàn)文字傾斜效果
有時候Android自帶的控件無法滿足我們的某些要求,這時就需要我們自定義控件來實現(xiàn)這些功能。比如在實際開發(fā)應用中,我們有時需要將TextView的文字傾斜一定的角度,就需要自定義TextView。下面這篇文章就給大家介紹了利用Android TextView如何實現(xiàn)文字傾斜效果。2016-11-11Android studio 切換flutterSDK之后報錯及解決辦法(推薦)
這篇文章主要介紹了Android studio 切換flutterSDK之后報錯及解決辦法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07圣誕節(jié),寫個程序練練手————Android 全界面懸浮按鈕實現(xiàn)
這篇文章主要介紹了圣誕節(jié),寫個程序練練手————Android 全界面懸浮按鈕實現(xiàn)的相關資料,需要的朋友可以參考下2015-12-12