在開發中,若是有須要用到序列化和反序列化的操做,就會用到 Serializable 或者 Parcelable,它們各有優缺點,會適用於不一樣的場景。算法
Serializable 的優勢是實現簡單,你只須要實現一個 Serializable 接口,並不須要任何額外的代碼,可是它的序列化和反序列化,其實是使用反射作的,因此效率會略低,而且它會在序列化的過程當中,會建立不少臨時變量,因此更容易觸發 GC。設計模式
Parcelable 須要開發者本身去實現序列化的規則,因此會增長代碼量,正是由於規則肯定,因此效率會提升不少,而且不容易觸發 GC。函數
在 Android 下,一般我會推薦使用 Parcelable ,可是它須要實現太多模板代碼了。那麼,有沒有辦法讓它和 Serializable 同樣,只通過簡單的配置就達到咱們序列化的需求呢?那就看看 Kotlin 新支持的 Parcelize 了。學習
Parcelize 是 Kotlin 在 1.1.4 中,新增長的功能。gradle
若是你須要使用它,先要保證 Android Studio 對 Kotlin 的插件已經升級到 1.1.4 之上的版本,如今的最新版是 1.2.10 ,我這裏剛升級了。插件
在新版的 Kotlin 插件中,已經自動包含了一個自動 Parcelable 實現生成器。簡單來講,只須要再主函數中,聲明序列化的屬性並添加一個 @Parcelize
註解,它將自動爲咱們建立 writeToParcel()
和 createFromParcel()
。也就是對開發者而言,只須要加一個 @Parcelize
註解,其餘的和正常的類沒有區別。設計
在 Kotlin 沒有支持 @Parcelize
的時候,咱們使用 Parcelable 的話,寫的 Model 類,大概是這樣的。3d
而若是使用了 @Parcelize
的話,這些模板代碼都是會幫咱們自動生成,咱們只須要增長一個 @Parcelize
註解就行了。code
有沒有感受到代碼量的減小?cdn
這兩個類,編譯完之後,其實是一致的。咱們這邊反編譯以後,看看 UserParcelize()
的代碼。
@Parcelize
註解實際上就是幫咱們自動生成了 writeToParcel()
和 createFromParcel()
,其實並無什麼高深的地方,可是這一點能夠節約咱們的代碼量。
@Parcelize
使用起來確實很是的方便,可是在此以前,咱們還要進行一些簡單的配置。
前面提到,@Parcelize
是須要 Kotlin 1.1.4 之上的版本才支持,因此你須要保證你的 Kotlin 版本爲最新的就行了。升級 Kotlin 如前文所述,直接升級 Kotlin 插件便可。升級完成以後,你能夠在 Preferences 中,經過 Kotlin Compiler 查看當前支持的版本,我這裏使用的是 1.2 版本。
@Parcelize
是一個實驗室功能,因此還須要在 Gradle 中,增長 experimental 配置。
直接使用 @Parcelize
你將面臨一個 Lint 的錯誤提示。固然 AS 已經爲咱們作出瞭解決它的提示。
只須要增長 @SuppressLint("ParcelCreator")
就能夠忽略它就能夠了。
今天的 Kotlin 小技巧,對你有沒有幫助?有什麼想法能夠在留言區討論。
今天在承香墨影公衆號的後臺,回覆『成長』。我會送你一些我整理的學習資料,包含:Android反編譯、算法、設計模式、虛擬機、Linux、Kotlin、Python、爬蟲、Web項目源碼。
推薦閱讀: