Kotlin 一个好用的新功能:Parcelize
在开发中,如果有需要用到序列化和反序列化的操作,就会用到 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 插件中,已经自动包含了一个自动 Parcelable 实现生成器。简单来说,只需要再主函数中,声明序列化的属性并添加一个 @Parcelize 注解,它将自动为我们创建 writeToParcel() 和 createFromParcel()。也就是对开发者而言,只需要加一个 @Parcelize 注解,其他的和正常的类没有区别。
二、使用 Parcelize
2.1 常规使用 Parcelable
在 Kotlin 没有支持 @Parcelize 的时候,我们使用 Parcelable 的话,写的 Model 类,大概是这样的。
2.2 使用 @Parcelize
而如果使用了 @Parcelize 的话,这些模板代码都是会帮我们自动生成,我们只需要增加一个 @Parcelize 注解就好了。
有没有感觉到代码量的减少?
2.3 实际上生成的代码
这两个类,编译完以后,实际上是一致的。我们这边反编译之后,看看 UserParcelize() 的代码。
@Parcelize 注解实际上就是帮我们自动生成了 writeToParcel() 和 createFromParcel(),其实并没有什么高深的地方,但是这一点可以节约我们的代码量。
三、前期配置
@Parcelize 使用起来确实非常的方便,但是在此之前,我们还要进行一些简单的配置。
3.1 Kotlin 版本
前面提到,@Parcelize 是需要 Kotlin 1.1.4 之上的版本才支持,所以你需要保证你的 Kotlin 版本为最新的就好了。升级 Kotlin 如前文所述,直接升级 Kotlin 插件即可。升级完成之后,你可以在 Preferences 中,通过 Kotlin Compiler 查看当前支持的版本,我这里使用的是 1.2 版本。
3.2 Gradle 配置
@Parcelize 是一个实验室功能,所以还需要在 Gradle 中,增加 experimental 配置。
3.3 解决 Lint 错误
直接使用 @Parcelize 你将面临一个 Lint 的错误提示。当然 AS 已经为我们做出了解决它的提示。
只需要增加 @SuppressLint("ParcelCreator") 就可以忽略它就可以了。
今天的 Kotlin 小技巧,对你有没有帮助?有什么想法可以在留言区讨论。
今天在承香墨影公众号的后台,回复『成长』。我会送你一些我整理的学习资料,包含:Android反编译、算法、设计模式、虚拟机、Linux、Kotlin、Python、爬虫、Web项目源码。
推荐阅读:
- Drawable 的这些常用小技巧,提高开发效率!
- Android 软键盘的显示和隐藏,这样操作就对了
- Android 反编译利器,jadx 的高级技巧
- 关于如何编写 Clean Code 的 6 个简单技巧
- 手写你的第一个 Dalvik 版的 HelloWorld !
Kotlin 一个好用的新功能:Parcelize的更多相关文章
- 看了一下unity5.6的新功能 以及Timeline
3月31日unity5.6发布,然而timeline(前sequence模块)被delay到unity 2017.上个星期官方又发布了unity 2017的beta版本 抽空看了下 (unity5.6 ...
- 一个新人如何学习在大型系统中添加新功能和Debug
文章背景: 今年七月份正式入职,公司主营ERP软件,楼主所在的组主要负责二次开发,使用的语言是Java. 什么叫二次开发呢?ERP软件的客户都是企业.而这些企业之间的情况都有所不同,一套标准版本的企业 ...
- Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能。
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能. 下面是一个效果图 ...
- Windows 11,一个新功能,一场新屠杀
6月24日,微软正式公布了新一代操作系统:Windows 11.这次的更新距离上一代操作系统Windows 10的发布,隔了有6年之久. 在新一代的操作系统中,包含了这些亮点: 采用了全新的UI设计. ...
- 《Spring5官方文档》新功能(4,3)
<Spring5官方文档>新功能 原文链接 译者:supriseli Spring框架的新功能 这一章主要提供Spring框架新的功能和变更. 升级到新版本的框架可以参考.Spring g ...
- Android Studio 3.0 下载 使用新功能介绍
谷歌2017发布会更新了挺多内容的,而且也发布了AndroidStudio3.0预览版,一些功能先睹为快.(英语一般,有些翻译不太好) 下载地址 https://developer.android.g ...
- 从淘宝 UWP 的新功能 -- 比较页面来谈谈 UWP 的窗口多开功能
前言 之前在 剁手党也有春天 -- 淘宝 UWP ”比较“功能诞生记 这篇随笔中介绍了一下 UWP 淘宝的“比较”新功能呱呱坠地的过程.在鲜活的文字背后,其实都是程序员不眠不休的血泪史(有血有泪有史) ...
- CSharpGL(24)用ComputeShader实现一个简单的图像边缘检测功能
CSharpGL(24)用ComputeShader实现一个简单的图像边缘检测功能 效果图 这是红宝书里的例子,在这个例子中,下述功能全部登场,因此这个例子可作为使用Compute Shader的典型 ...
- Sql Server 2016新功能之 Row-Level Security
Sql Server 2016 有一个新功能叫 Row-Level Security ,大概意思是行版本的安全策略(原来我是个英语渣_(:з」∠)_) 直接上例子.这个功能相当通过对表添加一个函数作为 ...
随机推荐
- J - Scarily interesting! URAL - 2021
This year at Monsters University it is decided to arrange Scare Games. At the Games all campus gathe ...
- JavaNIO阻塞IO
package com.java.NIO; import java.io.IOException; import java.net.InetSocketAddress; import java.nio ...
- html5页面实现点击复制功能
在实际工作中,有时候会遇到这样的需求,页面上有一个链接,不需要选中链接内容,只需要点击复制按钮,就可以把链接内容复制到剪切板.这时候可以使用clipboard插件来实现.以下是一个简单的demo. 首 ...
- setImmediate()
在循环事件任务完成后马上运行指定代码 以前使用 setTimeout(fn, 0); Since browsers clamp their timers to 4ms, it really d ...
- 阿里云全民云计算活动:云服务器ECS二折起(云主机)采购指南
首先要注册并登录阿里云,完成实名认证 可以用手机号新注册账号, 也可以使用淘宝账号直接登录,其他的登录方式还支持微博账号和支付宝账号等. 登录后如下图,先点"控制台", 然后鼠标移 ...
- javaScript函数提升及作用域
代码片段: var a = 1; function foo() { console.log(a); //输出为undefined if (!a) { var a = 2; } alert(a); }; ...
- 使用cobbler批量安装操作系统(基于Centos7.x )
1.1 cobbler简介 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等. Cobbler可以使 ...
- 微软Connect(); 2017大会梳理:Azure、数据、AI开发工具
在今天召开的 Connect(); 2017 开发者大会上,微软宣布了 Azure.数据.AI 开发工具的内容.这是第一天的 Connect(); 2017 的主题演讲. 在开场视频中霍金又来了.你记 ...
- linux下高可用LVS搭建及配置方法
一,安装与配置ipvsadm ipvsadm --help #查询是否安装成功 二,配置Director Server服务器 1. ifconifg eth0:0 183.61.87.4 ...
- Python 爬虫练习(一) 爬取国内代理ip
简单的正则表达式练习,爬取代理 ip. 仅爬取前三页,用正则匹配过滤出 ip 地址和 端口,分别作为key.value 存入 validip 字典. 如果要确定代理 ip 是否真的可用,还需要再对代理 ...