Computer >> Máy Tính >  >> Lập trình >> Android

Sự khác biệt giữa Parcelable và Serializable trong Android

Ví dụ này minh họa về sự khác biệt giữa Parcel có thể và Serializable trong android

Có thể sắp xếp theo thứ tự

Serializable là một giao diện có thể đánh dấu được hoặc chúng ta có thể gọi là một giao diện trống. Nó không có bất kỳ phương pháp triển khai trước nào. Serializable sẽ chuyển đổi một đối tượng thành luồng byte. Vì vậy, người dùng có thể chuyển dữ liệu giữa một hoạt động này sang hoạt động khác. Ưu điểm chính của serializable là việc tạo và chuyển dữ liệu rất dễ dàng nhưng nó là một quá trình chậm so với parcelable.

Một ví dụ đơn giản về serializable như được hiển thị bên dưới -

import java.io.Serializable;
class serializableObject implements Serializable {
   String name;
   public serializableObject(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
}

Có thể gửi được

Có thể bưu kiện nhanh hơn có thể nối tiếp. Parcel could sẽ chuyển đổi đối tượng thành luồng byte và chuyển dữ liệu giữa hai hoạt động. Viết mã bưu kiện có thể hơi phức tạp so với tuần tự hóa. Nó không tạo thêm đối tượng tạm thời trong khi chuyển dữ liệu giữa hai hoạt động.

Một ví dụ đơn giản về Bưu kiện có thể được hiển thị bên dưới -

import android.os.Parcel;
import android.os.Parcelable;
class parcleObject implements Parcelable {
   private String name;
   protected parcleObject(Parcel in) {
      this.name = in.readString();
   }
   public parcleObject(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public static final Creator<parcleObject> CREATOR = new Creator<parcleObject>() {
      @Override
      public parcleObject createFromParcel(Parcel in) {
         return new parcleObject(in);
      }
      @Override
      public parcleObject[] newArray(int size) {
         return new parcleObject[size];
      }
   };
   @Override
   public int describeContents() {
      return 0;
   }
   @Override
   public void writeToParcel(Parcel dest, int flags) {
      dest.writeString(this.name);
   }
}