最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android序列化實(shí)現(xiàn)接口Serializable與Parcelable詳解

 更新時(shí)間:2022年12月07日 10:36:56   作者:懶到死的程序員  
我們使用 Intent 傳遞數(shù)據(jù)的時(shí)候,putExtra() 所支持的數(shù)據(jù)類型事有限的,當(dāng)需要傳遞自定義對(duì)象的時(shí)候就需要序列化。Serializable更簡(jiǎn)單但是會(huì)把整個(gè)對(duì)象進(jìn)行序列化因此效率比Parcelable低一些

一、Serializable(對(duì)象)

只需要實(shí)現(xiàn)Serializable 接口即可。將一個(gè)對(duì)象序列化轉(zhuǎn)換成可存儲(chǔ)或傳輸?shù)臓顟B(tài),然后再強(qiáng)轉(zhuǎn)回來使用(反序列化)。

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    //反序列化成對(duì)象
}

二、Parcelable(屬性)

將一個(gè)對(duì)象進(jìn)行分解,分解后的每一個(gè)屬性都是Intent 所支持的數(shù)據(jù)類型。

2.1 實(shí)現(xiàn)方式(不推薦)

創(chuàng)建一個(gè)類實(shí)現(xiàn) Parcelable 接口,定義好屬性,按 ctrl+1 編譯器會(huì)自動(dòng)幫我們生成。

  • 實(shí)現(xiàn) Parcelable 接口,重寫 describeContents() 和 writeToParcel() 兩個(gè)函數(shù)。describeContents() 直接返回 0 就行。writeToParcel() 調(diào)用 writeXXX() 將類中屬性一一寫入。
  • 創(chuàng)建一個(gè)名為 CREATOR 的伴生對(duì)象實(shí)現(xiàn) Parcelable.Creator 接口,將泛型類型指定為<Person>,重寫 createFromParcel() 和 newArray() 兩個(gè)函數(shù)。createFromParcel()中創(chuàng)建一個(gè) Person 對(duì)象返回,并調(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
    }
    //伴生對(duì)象實(shí)現(xiàn)接口
    companion object CREATOR : Parcelable.Creator<Person> {
        //返回對(duì)象
        override fun createFromParcel(parcel: Parcel): Person {
            return Person(parcel)
        }
        //返回一個(gè)數(shù)組,形參 size 作為數(shù)組大小
        override fun newArray(size: Int): Array<Person?> {
            return arrayOfNulls(size)
        }
    }
}
//傳遞方式和 Serializable 一樣,使用如下:
TwoActivity {
    val person = intent.getParcelableExtra("person")
}

2.2 注解方式(推薦)

Kotlin提供了更簡(jiǎn)便的寫法,傳遞的屬性都需要定義在主構(gòu)造中。

//Module Gradle 引入插件
plugins {
    id 'kotlin-parcelize'
}
//使用
@Parcelize
class Person(val name: String, var age: Int) : Parcelable

到此這篇關(guān)于Android序列化實(shí)現(xiàn)接口Serializable與Parcelable詳解的文章就介紹到這了,更多相關(guān)Android Serializable與Parcelable內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android WebView實(shí)現(xiàn)頂部進(jìn)度條

    Android WebView實(shí)現(xiàn)頂部進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了Android WebView實(shí)現(xiàn)頂部進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Flutter-AnimatedWidget組件源碼示例解析

    Flutter-AnimatedWidget組件源碼示例解析

    這篇文章主要為大家介紹了Flutter-AnimatedWidget組件源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Android實(shí)現(xiàn)志愿者系統(tǒng)詳細(xì)步驟與代碼

    Android實(shí)現(xiàn)志愿者系統(tǒng)詳細(xì)步驟與代碼

    這篇文章主要介紹了Android實(shí)現(xiàn)志愿者系統(tǒng),本系統(tǒng)采用MVC架構(gòu)設(shè)計(jì),SQLite數(shù)據(jù)表有用戶表、成員表和活動(dòng)表,有十多個(gè)Activity頁面。打開應(yīng)用,進(jìn)入歡迎界面,3s后跳轉(zhuǎn)登錄界面,用戶先注冊(cè)賬號(hào),登錄成功后進(jìn)入主界面
    2023-02-02
  • Android RecyclerView加載兩種布局的方法

    Android RecyclerView加載兩種布局的方法

    這篇文章主要為大家詳細(xì)介紹了Android RecyclerView加載兩種布局的方法,Adapter加載多套布局,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android中判斷手機(jī)是否聯(lián)網(wǎng)實(shí)例

    Android中判斷手機(jī)是否聯(lián)網(wǎng)實(shí)例

    這篇文章主要介紹了Android中判斷手機(jī)是否聯(lián)網(wǎng)實(shí)例,包括xml配置文件及功能代碼的實(shí)現(xiàn),需要的朋友可以參考下
    2014-10-10
  • Android實(shí)現(xiàn)頂部導(dǎo)航菜單左右滑動(dòng)效果

    Android實(shí)現(xiàn)頂部導(dǎo)航菜單左右滑動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)頂部導(dǎo)航菜單左右滑動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Android控件Spinner實(shí)現(xiàn)下拉列表及監(jiān)聽功能

    Android控件Spinner實(shí)現(xiàn)下拉列表及監(jiān)聽功能

    這篇文章主要介紹了Android控件Spinner實(shí)現(xiàn)下拉列表及監(jiān)聽功能,這是在Web開發(fā)中一個(gè)必不可少的交互性組件,而在Android中的對(duì)應(yīng)實(shí)現(xiàn)就是Spinner。需要的朋友可以參考下
    2018-07-07
  • 詳解Retrofit Interceptor(攔截器) 攔截請(qǐng)求并做相關(guān)處理

    詳解Retrofit Interceptor(攔截器) 攔截請(qǐng)求并做相關(guān)處理

    本篇文章主要介紹了詳解Retrofit Interceptor(攔截器) 攔截請(qǐng)求并做相關(guān)處理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • Android序列化之Parcelable和Serializable的使用詳解

    Android序列化之Parcelable和Serializable的使用詳解

    本篇文章主要介紹了Android序列化之Parcelable和Serializable的使用詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Android中獲取狀態(tài)欄高度的兩種方法分享

    Android中獲取狀態(tài)欄高度的兩種方法分享

    在android應(yīng)用中,有時(shí)需要計(jì)算個(gè)View的位置,導(dǎo)致需要計(jì)算狀態(tài)欄高度。為以后方便,在此做個(gè)簡(jiǎn)單記錄。下面這篇文章主要介紹了Android中獲取狀態(tài)欄高度的兩種方法,兩種方法分別給出了示例代碼,有需要的朋友可以參考借鑒。
    2017-02-02

最新評(píng)論

师宗县| 保靖县| 清水县| 南开区| 开鲁县| 临洮县| 普宁市| 津南区| 彭阳县| 丹寨县| 蕉岭县| 舒城县| 涿鹿县| 开阳县| 巴彦淖尔市| 宁城县| 龙井市| 兴国县| 甘孜县| 新巴尔虎左旗| 资源县| 海林市| 莱西市| 东辽县| 浑源县| 宝应县| 兴化市| 女性| 绥芬河市| 宁城县| 天气| 县级市| 临西县| 化隆| 康平县| 东光县| 左贡县| 射洪县| 随州市| 宁明县| 和政县|