Android使用Kotlin新特性Parcelize序列化对象

Android对对象序列化主要有两种方式:Serializable和Parcelable。

Serializable实际是使用Java的放射机制对对象做序列化和反序列化,其性能远低于使用Parcelable。但是使用Java写的Parcelable有点繁琐,需要我们实现Parcelable接口,手写很多模板代码。

Java版Parcelable示例

public class User implements Parcelable{
        private String id;
        private String name;

        public User(String id, String name, String grade){
            this.id = id;
            this.name = name;
       }
       // Getter and setter methods
       .........
       .........

       // Parcelling部分
       public User(Parcel in){
           String[] data = new String[2];

           in.readStringArray(data);
           // 使用数组获取属性的值需要和writeToParcel()写进去的顺序一致
           this.id = data[0];
           this.name = data[1];
       }

       @Оverride
       public int describeContents(){
           return 0;
       }

       @Override
       public void writeToParcel(Parcel dest, int flags) {
           dest.writeStringArray(new String[] {this.id,
                                               this.name});
       }
       public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
           public User createFromParcel(Parcel in) {
               return new User(in); 
           }

           public User[] newArray(int size) {
               return new User[size];
           }
       };
   }

Java版的Parclable,需要重写wirteToParcel方法序列化对象,需要创建以Parcle为参数的构造函数用来对对象反序列化。需要构建Parclable.Creator。

这些代码大多数都是差不多,但我们还是要手写实现。

Kotlin Parcelable特性

Kotlin1.1.4新增了Parcelable特性,添加注解@Parcelize就可以自动生成相应的Parcelable代码。

  上面的例子实现如下:

@Parcelize
data class User(val id: String, val name: String) : Parcelable

相当的简洁!

使用

1、kotlin:>=1.1.4

2、app的build.gradle添加插件

apply plugin: 'kotlin-android-extensions'

3、app的build.gradle下android配置添加

androidExtensions {
    experimental = true
}

基于kotlin的build.gradle示例

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
  compileSdkVersion 26
  defaultConfig {
    ...
  }
  buildTypes {
    ...
  }
  androidExtensions {
    experimental = true
  }
}
dependencies {
  ...
}

4、模型实现Parclable,添加@Parclize

import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
data class User(val name: String, val age: Int) : Parcelable

版权声明:著作权归作者所有。

相关推荐

Kotlin使用kotlin-kapt插件支持Android的注解处理

在Kotlin可以使用kapt插件来支持Android的注解处理。在Gradle配置kotlin-kapt插件如下:在app的build.gradle添加插件apply plugin: 'kotlin-kapt' 使用kapt添加注解依赖java使用annotationProcessor 添加的依赖改为使用kapt。例如添加dagger依赖dependencies {

Html5使用localStorage存储对象数据

Html5可使用localStorage存储数据,其方法为storage.setItem(keyName, keyValue); 其中:keyName:键,字符串类型keyValue:值,字符串类型关于setItem,可以参考:Storage.setItem()。如果需要存储对象数据,那么需要把对象数据使用JSON.stringify转换为字符串。localStorage.setItem

Android使用CountDownTimer实现倒计时示例(Kotlin)

CountDownTimer是一个抽象类,它的构造函数为CountDownTimer(long millisInFuture, long countDownInterval) millisInFuture:倒计时的总时间,从调用start()方法开始。毫秒数countDownInterval:倒计时的时间间隔。毫秒数。CountDownTimer主要有四个方法:syn

Linux Android Studio代码格式化快捷键

方式一Ctrl + Shift + Alt + L方式二因为Linux使用Ctrl + Alt + L作为它的锁屏快捷方式,我们可以修改系统默认的快捷设置,把Linux Android Studio的代码格式化快捷方式改为Ctrl + Alt + L:System Tools -> System Settings ->