Kotlin 一個好用的新功能:Parcelize

179

在開發中,若是有須要用到序列化和反序列化的操做,就會用到 Serializable 或者 Parcelable,它們各有優缺點,會適用於不一樣的場景。算法

Serializable 的優勢是實現簡單,你只須要實現一個 Serializable 接口,並不須要任何額外的代碼,可是它的序列化和反序列化,其實是使用反射作的,因此效率會略低,而且它會在序列化的過程當中,會建立不少臨時變量,因此更容易觸發 GC。設計模式

Parcelable 須要開發者本身去實現序列化的規則,因此會增長代碼量,正是由於規則肯定,因此效率會提升不少,而且不容易觸發 GC。函數

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

1、Kotlin 的 Parcelize

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

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

kotlin-plugin

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

2、使用 Parcelize

2.1 常規使用 Parcelable

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

Parcelable-kotlin

2.2 使用 @Parcelize

而若是使用了 @Parcelize 的話,這些模板代碼都是會幫咱們自動生成,咱們只須要增長一個 @Parcelize 註解就行了。code

Parcelize-kotlin

有沒有感受到代碼量的減小?cdn

2.3 實際上生成的代碼

這兩個類,編譯完之後,其實是一致的。咱們這邊反編譯以後,看看 UserParcelize() 的代碼。

jadx0

@Parcelize 註解實際上就是幫咱們自動生成了 writeToParcel()createFromParcel(),其實並無什麼高深的地方,可是這一點能夠節約咱們的代碼量。

3、前期配置

@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項目源碼。

推薦閱讀:

相關文章
相關標籤/搜索