Kotlin 一個(gè)好用的新功能:Parcelize

179

在開發(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-plugin

在新版的 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 類,大概是這樣的冯乘。

Parcelable-kotlin

2.2 使用 @Parcelize

而如果使用了 @Parcelize 的話洽胶,這些模板代碼都是會(huì)幫我們自動(dòng)生成,我們只需要增加一個(gè) @Parcelize 注解就好了裆馒。

Parcelize-kotlin

有沒有感覺到代碼量的減少姊氓?

2.3 實(shí)際上生成的代碼

這兩個(gè)類,編譯完以后喷好,實(shí)際上是一致的翔横。我們這邊反編譯之后,看看 UserParcelize() 的代碼梗搅。

jadx0

@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 版本。

kotlin-version

3.2 Gradle 配置

@Parcelize 是一個(gè)實(shí)驗(yàn)室功能祝辣,所以還需要在 Gradle 中贴妻,增加 experimental 配置切油。

gradle-conf

3.3 解決 Lint 錯(cuò)誤

直接使用 @Parcelize 你將面臨一個(gè) Lint 的錯(cuò)誤提示蝙斜。當(dāng)然 AS 已經(jīng)為我們做出了解決它的提示。

lint

只需要增加 @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)目源碼河狐。

推薦閱讀:

[圖片上傳失敗...(image-ebbc9-1513741447718)]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捐祠,一起剝皮案震驚了整個(gè)濱河市非驮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雏赦,老刑警劉巖劫笙,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異星岗,居然都是意外死亡填大,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門俏橘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來允华,“玉大人,你說我怎么就攤上這事⊙ゼ牛” “怎么了磷蜀?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)百炬。 經(jīng)常有香客問我褐隆,道長(zhǎng),這世上最難降的妖魔是什么剖踊? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任庶弃,我火速辦了婚禮,結(jié)果婚禮上德澈,老公的妹妹穿的比我還像新娘歇攻。我一直安慰自己,他們只是感情好梆造,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布缴守。 她就那樣靜靜地躺著,像睡著了一般镇辉。 火紅的嫁衣襯著肌膚如雪屡穗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天摊聋,我揣著相機(jī)與錄音鸡捐,去河邊找鬼。 笑死麻裁,一個(gè)胖子當(dāng)著我的面吹牛箍镜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播煎源,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼色迂,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了手销?” 一聲冷哼從身側(cè)響起歇僧,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锋拖,沒想到半個(gè)月后诈悍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兽埃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年侥钳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柄错。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舷夺,死狀恐怖苦酱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情给猾,我是刑警寧澤疫萤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站敢伸,受9級(jí)特大地震影響扯饶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜详拙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一帝际、第九天 我趴在偏房一處隱蔽的房頂上張望蔓同。 院中可真熱鬧饶辙,春花似錦、人聲如沸斑粱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽则北。三九已至矿微,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尚揣,已是汗流浹背涌矢。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留快骗,地道東北人娜庇。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像方篮,于是被迫代替她去往敵國(guó)和親名秀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容