1. 程式人生 > >Kotlin 便捷的實現 Parcelable 序列化

Kotlin 便捷的實現 Parcelable 序列化

Android中的序列化

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

Serializable

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

Parcelable

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

如何在 Kotlin 中便捷的使用 Parcelable

在 Kotlin 中使用 Parcelable 序列化有一個簡單的方式,那就是利用 Kotlin 在 1.1.4 版本中新增的一個註解

@Parcelize 

如果你需要使用它,先要保證 Android Studio 對 Kotlin 的外掛已經升級到 1.1.4 之上的版本,現在的最新版是 1.2.10 。

在新版的 Kotlin 外掛中,已經自動包含了一個自動 Parcelable 實現生成器。簡單來說,只需要再主函式中,宣告序列化的屬性並新增一個 @Parcelize 註解,它將自動為我們建立 writeToParcel() 和 createFromParcel()。也就是對開發者而言,只需要加一個 @Parcelize 註解,其它的和正常的類沒有區別。

使用 @Parcelize

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

android{
    ...
    androidExtensions {
        experimental = true
    }
    ...
}

然後在實體類中使用:

@SuppressLint("ParcelCreator")// 用於處理 Lint 的錯誤提示
@Parcelize
open class BaseBean : Parcelable{}

另外需要注意的是,子類繼承 BaseBean 時也是需要新增 @SuppressLint("ParcelCreator")

@SuppressLint("ParcelCreator")
data class UserBean(var name: String = "") : BaseBean() {
}


這裡寫圖片描述

相關推薦

Kotlin 便捷實現 Parcelable 序列

Android中的序列化 在開發中,如果有需要用到序列化和反序列化的操作,就會用到 Serializable 或者 Parcelable,它們各有優缺點,會適用於不同的場景。 Serializable Serializable 的優點是實現簡單,你只需

python實現資料庫序列儲存帶有漢字的列表

import pymysql import json b = ["你","好"] b = json.dumps(b,ensure_ascii=False) conn = pymysql.connect(host="",port=3306,user='',password='',db='',char

利用Avro實現Kakfa序列和反序列

  1 在pom.xml中新增依賴,     1.1 在dependencies中配置: <dependency> <groupId>org.apache.avro</groupId> <ar

【原創】自己手寫實現Boost序列簡易版

設計思路   在與多個系統進行網路互動時,序列化是不可缺少的技術。編寫一個C++語言的序列化實現,是練習運用模板超程式設計的絕佳案例,理解C++模板是如何"面向編譯期程式設計"的(業內好像沒有這個說法)。序列化物件處理基礎資料型別和類型別,boost的序列化功能劃分得更細緻,基本支援了C++語言

什麼是 Java 序列,如何實現 java 序列

大概解釋: 序列化就是: 一種用來處理物件流的機制,所謂物件流也就是將物件的內容進行流化。可以對流化後的物件進行讀寫操作,也可將流化後的物件傳輸於網路之間。 序列化是為了: 解決在對物件流進行讀寫操作時所引發的問題。 序列化的實現: 將需要被序列化的類實現Serializab

持久化類7個規範以及持久化類為什麼要實現Serializable序列

PO(Persistence Object)持久化類7個規範 1.公有類 2.公有無參構造 3.私有屬性 4.公有的getter與setter 5.實現java.io.Serializable介面 6.不能用final修飾 7.如果是基礎 型

關於android傳遞物件Parcelable序列的問題

package com.example.parceldemo; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Intent; import an

Android使用Parcelable序列複雜資料結構

前言 說到序列化我們都不陌生,最簡單的就是讓我們的實體類來實現java io包下的Serializable介面即可,但是android單獨又寫了自己的序列化方案,即Parcelable,它比Serializable更快,效率更高,佔用記憶體更少!因此也是Goo

什麼是java序列,如何實現java序列?(寫一個例項)?

原文地址:http://blog.csdn.net/cselmu9/article/details/41908741 Java 序列化技術可以使你將一個物件的狀態寫入一個Byte 流裡,並且可以從其它地方把該Byte 流裡的資料讀出來,重新構造一個相同的物件。這種機制允

springboot rabbitMQ 自定義MessageConverter和ClassMapper實現訊息序列

背景:公司專案使用springboot + rabbitMQ 處理訂單和推送訊息,最開始的時候,producer都是直接convertAndSend的json資料, consumer也是接收json資料,然後在轉化為Bean去處理邏輯。當然,這樣雖然沒啥大問題,但是感覺很麻煩,後來查閱文件,

如何實現 Gson 序列/反序列過程中 過濾指定欄位

經過實戰: gson 過濾某一個屬性  但是又想在反序列正常set值,這個梗越了一段時間 使用ExclusionStrategy定製欄位排除策略:也是通過newGsonBuilder()來設定,自定

什麼是java序列,如何實現java序列?或請解釋Serializable介面的作用

首先要明確序列化的目的:     1.無論何種型別的資料,都是以二進位制的形式在網路上傳送,為了由一個程序把Java物件傳送給另一個程序,需要把其轉換為位元組序列才能在網路上傳送,把JAVA物件轉換為位元組序列的過程就稱為物件的序列化,將位元組序列恢復成Java物件的過程稱為物件的反序列化,(然後jav

Java中,什麼是實現物件序列?如何實現物件序列

    物件序列化可以將一個物件儲存到一個檔案,可以將通過流的方式在網路上傳輸,可以將檔案的內容讀取轉化為一個物件。所謂物件流也就是將物件的內容流化,可以對流化後的物件進行讀寫操作,也可將流化後的物件傳輸於網路之間。序列化是為了解決在物件流進行讀寫操作時引發的問題。    

註解實現json序列的時候自動進行資料脫敏

最近在進行開發的時候遇到一個問題,需要對使用者資訊進行脫敏處理,原有的方式是寫一個util類,在需要脫敏的欄位查出資料後,顯示掉用方法處理後再set回去,覺得這種方式能實現功能,但是不是特別優雅,想找個比較優雅的實現。 思考了一下,覺得資料只有在輸出的時候進行脫敏處理即可,

什麼是java序列,如何實現java序列

Java 序列化技術可以使你將一個物件的狀態寫入一個Byte 流裡,並且可以從其它地方把該Byte 流裡的資料讀出來,重新構造一個相同的物件。這種機制允許你將物件通過網路進行傳播,並可以隨時把物件持久化到資料庫、檔案等系統裡。Java的序列化機制是RMI、EJB等技術的技術

Android 使用Parcelable序列物件

Android序列化物件主要有兩種方法,實現Serializable介面、或者實現Parcelable介面。實現Serializable介面是Java SE本身就支援的,而Parcelable是Android特有的功能,效率比實現Serializable介面高,而且還可以用在IPC中。實現Serializab

Json反序列之ObjectMapper(自定義實現序列方法)

     對於伺服器端開發人員而言,呼叫第三方介面獲取資料,將其“代理”轉化並返給客戶端幾乎是家常便飯的事兒。    一般情況下,第三方介面返回的資料型別是json格式,而伺服器開發人員則需將json格式的資料轉換成物件,繼而對其進行處理並封裝,以返回給客戶端。  

Java 基礎資料型別 和 深度克隆物件的2種方法(實現Cloneable介面或者實現物件序列)

知識點1(java有9種傳遞函式引數時是傳值): 8大基礎資料型別加String: 1,位元組 byte   2,短整型 short  3,整型int  4,長整形 long  5,字元型 char  6,浮點型 float  7,雙精度型 double  8,布林型 bo

C# 實現Json 序列和反序列功能

1、新建一個 JSON 類,實現如下所示程式碼: /* * * 表示層的輔助類 * * 功能:JSON序列化和反序列化 * 作者:凌霜殘血 * */ public class JSON {

Lua 中實現 protobuf 序列,反序列

Protobuf 官方並沒有 Lua版本,然後網易的程式猿開發出了 protoc-gen-lua ,可以讓我們將 Proto 檔案轉成 lua 指令碼在 Lua中使用,下面是詳細的編譯、安裝、使用教程。文中用到的程式碼、工具都有百度網盤下載。 網盤下載地址: http: