Kotlin 一個好用的新功能:Parcelize

小說:香花槐種子哪里賣?作者:侯密更新時間:2019-05-27字數:40002

雖然說修為沒什么提升,但是卻感覺更加圓潤,自然,雙修作為弱的一方當然收獲巨大了,一晚之間布瑪的內功修為達到了宗師境界的地步,而且真氣精純無比,完全不像別的雙修武者提升上來的真氣那樣駁雜,混亂,比起自己修煉出來的還要精純。

桃樹哪里有賣?

隱娘亦完全呆住了,本以為死的會是自己,卻沒想到情勢突然間就變得完全不同。她看著被鮮血染紅了白衣的小女孩,心里竟是驟然一痛,雖然這個小女孩剛才還差點殺了她,但看著這樣一個瘦小的孩子被樹枝貫穿,血濺當場,她還是忍不住生出一份惻隱之心。
“皇上,萬萬不能,一旦開放邊地,必然流寇四起,到時邊地不寧,商船難以保證,最終損失的還是我們?!?/p>

葉揚和梅比斯微微一愣,便是感覺到一股強大的威壓從林風的體內緩緩的升起。SSS級強者的威勢在這一瞬間便是充斥在周圍的空間中,仿佛有著一頭洪荒巨獸蘇醒過來。

Kotlin 一個好用的新功能:Parcelize


179

在開發中,如果有需要用到序列化和反序列化的操作,就會用到 Serializable 或者 Parcelable,它們各有優缺點,會適用于不同的場景。

Serializable 的優點是實現簡單,你只需要實現一個 Serializable 接口,并不需要任何額外的代碼,但是它的序列化和反序列化,實際上是使用反射做的,所以效率會略低,并且它會在序列化的過程中,會創建很多臨時變量,所以更容易觸發 GC。

Parcelable 需要開發者自己去實現序列化的規則,所以會增加代碼量,正是因為規則確定,所以效率會提高很多,并且不容易觸發 GC。

在 Android 下,通常我會推薦使用 Parcelable ,但是它需要實現太多模板代碼了。那么,有沒有辦法讓它和 Serializable 一樣,只經過簡單的配置就達到我們序列化的需求呢?那就看看 Kotlin 新支持的 Parcelize 了。

一、Kotlin 的 Parcelize

Parcelize 是 Kotlin 在 1.1.4 中,新增加的功能。

如果你需要使用它,先要保證 Android Studio 對 Kotlin 的插件已經升級到 1.1.4 之上的版本,現在的最新版是 1.2.10 ,我這里剛升級了。

kotlin-plugin

在新版的 Kotlin 插件中,已經自動包含了一個自動 Parcelable 實現生成器。簡單來說,只需要再主函數中,聲明序列化的屬性并添加一個 @Parcelize 注解,它將自動為我們創建 writeToParcel()createFromParcel()。也就是對開發者而言,只需要加一個 @Parcelize 注解,其他的和正常的類沒有區別。

二、使用 Parcelize

2.1 常規使用 Parcelable

在 Kotlin 沒有支持 @Parcelize 的時候,我們使用 Parcelable 的話,寫的 Model 類,大概是這樣的。

Parcelable-kotlin

2.2 使用 @Parcelize

而如果使用了 @Parcelize 的話,這些模板代碼都是會幫我們自動生成,我們只需要增加一個 @Parcelize 注解就好了。

Parcelize-kotlin

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

2.3 實際上生成的代碼

這兩個類,編譯完以后,實際上是一致的。我們這邊反編譯之后,看看 UserParcelize() 的代碼。

jadx0

@Parcelize 注解實際上就是幫我們自動生成了 writeToParcel()createFromParcel(),其實并沒有什么高深的地方,但是這一點可以節約我們的代碼量。

三、前期配置

@Parcelize 使用起來確實非常的方便,但是在此之前,我們還要進行一些簡單的配置。

3.1 Kotlin 版本

前面提到,@Parcelize 是需要 Kotlin 1.1.4 之上的版本才支持,所以你需要保證你的 Kotlin 版本為最新的就好了。升級 Kotlin 如前文所述,直接升級 Kotlin 插件即可。升級完成之后,你可以在 Preferences 中,通過 Kotlin Compiler 查看當前支持的版本,我這里使用的是 1.2 版本。

kotlin-version

3.2 Gradle 配置

@Parcelize 是一個實驗室功能,所以還需要在 Gradle 中,增加 experimental 配置。

gradle-conf

3.3 解決 Lint 錯誤

直接使用 @Parcelize 你將面臨一個 Lint 的錯誤提示。當然 AS 已經為我們做出了解決它的提示。

lint

只需要增加 @SuppressLint("ParcelCreator") 就可以忽略它就可以了。

今天的 Kotlin 小技巧,對你有沒有幫助?有什么想法可以在留言區討論。

今天在承香墨影公眾號的后臺,回復『成長』。我會送你一些我整理的學習資料,包含:Android反編譯、算法、設計模式、虛擬機、Linux、Kotlin、Python、爬蟲、Web項目源碼。

推薦閱讀:

  • Drawable 的這些常用小技巧,提高開發效率!
  • Android 軟鍵盤的顯示和隱藏,這樣操作就對了
  • Android 反編譯利器,jadx 的高級技巧
  • 關于如何編寫 Clean Code 的 6 個簡單技巧
  • 手寫你的第一個 Dalvik 版的 HelloWorld !

當前文章:http://www.hfcxdn.com/array/u07zu39z7v.html

發布時間:2019-05-27 06:58:55

華東地區最大的花葉黃楊球產地,規格多價格低質量好 1公分早園竹多少錢一棵? 高度80公分的水臘小苗多少錢一棵? 求購碧桃去哪家最好? 山西可以栽植蔥蘭嗎? 高層樓頂能種紫藤嗎 紫藤花苗有哪些購買方式呢? 北方金葉女貞基地哪里最多最大?

1-2cm紫薇多少錢一棵? 一級樹型8公分大葉女貞低價銷售 海桐綠籬一平米栽多少棵? 海棠你還是那么魅力四射,看一眼還想看第二眼 哪里賣羊蹄甲種子的? 虞美人種子發芽率是多少? 黃金菊種子批發什么價格? 流蘇花期是什么時候? 三月可以種植海桐嗎?

編輯:丁陵伯

我要說兩句: (0人參與)

發布
捕鱼达人之深海狩猎