在開發(fā)中较鼓,如果有需要用到序列化和反序列化的操作椎木,就會(huì)用到 Serializable 或者 Parcelable,它們各有優(yōu)缺點(diǎn)博烂,會(huì)適用于不同的場(chǎng)景香椎。
Serializable 的優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,你只需要實(shí)現(xiàn)一個(gè) Serializable 接口禽篱,并不需要任何額外的代碼畜伐,但是它的序列化和反序列化,實(shí)際上是使用反射做的躺率,所以效率會(huì)略低玛界,并且它會(huì)在序列化的過程中,會(huì)創(chuàng)建很多臨時(shí)變量悼吱,所以更容易觸發(fā) GC慎框。
Parcelable 需要開發(fā)者自己去實(shí)現(xiàn)序列化的規(guī)則,所以會(huì)增加代碼量后添,正是因?yàn)橐?guī)則確定鲤脏,所以效率會(huì)提高很多,并且不容易觸發(fā) GC吕朵。
在 Android 下猎醇,通常我會(huì)推薦使用 Parcelable ,但是它需要實(shí)現(xiàn)太多模板代碼了努溃。那么硫嘶,有沒有辦法讓它和 Serializable 一樣,只經(jīng)過簡(jiǎn)單的配置就達(dá)到我們序列化的需求呢梧税?那就看看 Kotlin 新支持的 Parcelize 了沦疾。
一、Kotlin 的 Parcelize
Parcelize 是 Kotlin 在 1.1.4 中第队,新增加的功能哮塞。
如果你需要使用它,先要保證 Android Studio 對(duì) Kotlin 的插件已經(jīng)升級(jí)到 1.1.4 之上的版本凳谦,現(xiàn)在的最新版是 1.2.10 忆畅,我這里剛升級(jí)了。
在新版的 Kotlin 插件中尸执,已經(jīng)自動(dòng)包含了一個(gè)自動(dòng) Parcelable 實(shí)現(xiàn)生成器家凯。簡(jiǎn)單來說缓醋,只需要再主函數(shù)中,聲明序列化的屬性并添加一個(gè) @Parcelize
注解绊诲,它將自動(dòng)為我們創(chuàng)建 writeToParcel()
和 createFromParcel()
送粱。也就是對(duì)開發(fā)者而言,只需要加一個(gè) @Parcelize
注解掂之,其他的和正常的類沒有區(qū)別抗俄。
二、使用 Parcelize
2.1 常規(guī)使用 Parcelable
在 Kotlin 沒有支持 @Parcelize
的時(shí)候世舰,我們使用 Parcelable 的話橄镜,寫的 Model 類,大概是這樣的冯乘。
2.2 使用 @Parcelize
而如果使用了 @Parcelize
的話洽胶,這些模板代碼都是會(huì)幫我們自動(dòng)生成,我們只需要增加一個(gè) @Parcelize
注解就好了裆馒。
有沒有感覺到代碼量的減少姊氓?
2.3 實(shí)際上生成的代碼
這兩個(gè)類,編譯完以后喷好,實(shí)際上是一致的翔横。我們這邊反編譯之后,看看 UserParcelize()
的代碼梗搅。
@Parcelize
注解實(shí)際上就是幫我們自動(dòng)生成了 writeToParcel()
和 createFromParcel()
禾唁,其實(shí)并沒有什么高深的地方,但是這一點(diǎn)可以節(jié)約我們的代碼量无切。
三荡短、前期配置
@Parcelize
使用起來確實(shí)非常的方便,但是在此之前哆键,我們還要進(jìn)行一些簡(jiǎn)單的配置。
3.1 Kotlin 版本
前面提到籍嘹,@Parcelize
是需要 Kotlin 1.1.4 之上的版本才支持闪盔,所以你需要保證你的 Kotlin 版本為最新的就好了辱士。升級(jí) Kotlin 如前文所述泪掀,直接升級(jí) Kotlin 插件即可。升級(jí)完成之后颂碘,你可以在 Preferences 中异赫,通過 Kotlin Compiler 查看當(dāng)前支持的版本,我這里使用的是 1.2 版本。
3.2 Gradle 配置
@Parcelize
是一個(gè)實(shí)驗(yàn)室功能祝辣,所以還需要在 Gradle 中贴妻,增加 experimental 配置切油。
3.3 解決 Lint 錯(cuò)誤
直接使用 @Parcelize
你將面臨一個(gè) Lint 的錯(cuò)誤提示蝙斜。當(dāng)然 AS 已經(jīng)為我們做出了解決它的提示。
只需要增加 @SuppressLint("ParcelCreator")
就可以忽略它就可以了澎胡。
今天的 Kotlin 小技巧孕荠,對(duì)你有沒有幫助?有什么想法可以在留言區(qū)討論攻谁。
今天在承香墨影公眾號(hào)的后臺(tái)稚伍,回復(fù)『成長(zhǎng)』。我會(huì)送你一些我整理的學(xué)習(xí)資料戚宦,包含:Android反編譯个曙、算法、設(shè)計(jì)模式受楼、虛擬機(jī)垦搬、Linux、Kotlin艳汽、Python猴贰、爬蟲、Web項(xiàng)目源碼河狐。
推薦閱讀:
- Drawable 的這些常用小技巧米绕,提高開發(fā)效率!
- Android 軟鍵盤的顯示和隱藏馋艺,這樣操作就對(duì)了
- Android 反編譯利器栅干,jadx 的高級(jí)技巧
- 關(guān)于如何編寫 Clean Code 的 6 個(gè)簡(jiǎn)單技巧
- 手寫你的第一個(gè) Dalvik 版的 HelloWorld !
[圖片上傳失敗...(image-ebbc9-1513741447718)]