java编程中,为了将对象的状态保存,需要将对象序列化。

在android中,序列化有两种方法可供选择,一个是java自带的序列化方法,只需实现Serializeable接口即可;另一个是android提供的方法,要实现Parcelable接口,并实现其中的一些方法,相对要复杂一些。

两者区别:

Parcelable消耗内存少,更加高效。

Serializeable更适合长期保存数据,和网络传输。

下面主要讲解Parceable的使用。

将想要序列化的对象的类实现Parcelable接口,并实现其中的方法:

public class MyParcelable implements Parcelable {
int mData; public MyParcelable(int mData){
this.mData=mData;
} public int describeContents() {
return 0;
} //将对象打包为Parcel类型对象
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
} //将Parcel对象解压为MyParcelable对象
public static final Creator<MyParcelable> CREATOR
= new Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
} public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
}; //从Parcel对象中读取数据
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}

在MainActivity中添加到Intent中,并传递:

        Intent intent = new Intent(MainActivity.this, SecActivity.class);
Bundle bundle = new Bundle();
MyParcelable myParcelable = new MyParcelable(99);
bundle.putParcelable("myParcelable", myParcelable);
intent.putExtras(bundle);
startActivity(intent);

  

在SecActivity中获取:

MyParcelable myParcelable=getIntent().getParcelableExtra("myParcelable");

如果新类型中的成员的数据类型为数组、List、Map或自定义类型时:

public class UserInfo implements Parcelable {

    int age;
MyType[] hobbies;
MyType myType;
List<MyType> list;
HashMap<String, MyType> map; public UserInfo(int age, MyType[] hobbies, MyType myType, List<MyType> list, HashMap<String, MyType> map) {
this.age = age;
this.hobbies = hobbies;
this.myType = myType;
this.list = list;
this.map = map;
} protected UserInfo(Parcel in) {
age = in.readInt();
hobbies = in.createTypedArray(MyType.CREATOR);
myType = in.readParcelable(MyType.class.getClassLoader());
list = in.createTypedArrayList(MyType.CREATOR);
map=in.readHashMap(HashMap.class.getClassLoader());
} @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(age);
dest.writeTypedArray(hobbies, flags);
dest.writeParcelable(myType, flags);
dest.writeTypedList(list);
dest.writeMap(map);
} @Override
public int describeContents() {
return 0;
} public static final Creator<UserInfo> CREATOR = new Creator<UserInfo>() {
@Override
public UserInfo createFromParcel(Parcel in) {
return new UserInfo(in);
} @Override
public UserInfo[] newArray(int size) {
return new UserInfo[size];
}
}; @Override
public String toString() {
return "UserInfo{" +
"age=" + age +
", hobbies=" + Arrays.toString(hobbies) +
", myType=" + myType +
", list=" + list +
", map=" + map +
'}';
}
}
public class MyType implements Parcelable{

    String name;
int age; public MyType(String name, int age) {
this.name = name;
this.age = age;
} protected MyType(Parcel in) {
name = in.readString();
age = in.readInt();
} public static final Creator<MyType> CREATOR = new Creator<MyType>() {
@Override
public MyType createFromParcel(Parcel in) {
return new MyType(in);
} @Override
public MyType[] newArray(int size) {
return new MyType[size];
}
}; @Override
public int describeContents() {
return 0;
} @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
} @Override
public String toString() {
return "MyType{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

android之Parcelable的更多相关文章

  1. Android 使用Parcelable序列化对象

    转:http://ipjmc.iteye.com/blog/1314145       Android序列化对象主要有两种方法,实现Serializable接口.或者实现Parcelable接口.实现 ...

  2. android 开发Parcelable 怎么传值ArrayList

    public class TradeEntity implements Parcelable{ public String id; //有关进度条的参数 ArrayList<TradeState ...

  3. Android中Parcelable序列化总结

    在使用Parcelable对android中数据的序列化操作还是比较有用的,有人做过通过对比Serializable和Parcelable在android中序列化操作对象的速度比对,大概Parcela ...

  4. Android接口Parcelable的使用

    注明:非原创,转载,原链接地址为:http://www.2cto.com/kf/201205/132814.html 和 http://www.blogjava.net/lincode/archive ...

  5. Android API之android.os.Parcelable

    android.os.Parcelable Interface for classes whose instances can be written to and restored from a Pa ...

  6. Android中Parcelable与Serializable接口用法

    转自: Android中Parcelable接口用法 1. Parcelable接口 Interface for classes whose instances can be written to a ...

  7. Android中Parcelable的使用

    转载请标明出处 :https://www.cnblogs.com/tangZH/p/10998065.html  Parcelable与Serializable Serializable是Java为我 ...

  8. android基础---->Parcelable的使用

     android中Parcelable序列化的使用,简单的记录一下. 目录导航: Serializable在android中的使用 Parcelable在android中的使用 Serializabl ...

  9. Android中Parcelable的原理和使用方法

    Parcelable的简单介绍 介绍Parcelable不得不先提一下Serializable接口,Serializable是Java为我们提供的一个标准化的序列化接口,那什么是序列化呢? 进行And ...

  10. Android 的Parcelable接口

    此文转载自http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html 1. Parcelable接口 Interface ...

随机推荐

  1. 前端生成分享海报兼容H5和小程序

    ### 移动端分享海报生成 最近做项目需求是生成商品分享海报,并且保存到手机中要兼容H5和小程序<br> 与后端同学沟通后,海报在前端生成最省性能和有较好的交互体验,先看做好的效果

  2. C语言结构体及其内存布局

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  3. Vite2+Electron仿抖音|vite2.x+electron12+vant3短视频|直播|聊天

    整合vite2+electron12跨平台仿抖音电脑版实战Vite2-ElectronDouYin. 基于vite2.0+electron12+vant3+swiper6+v3popup等技术跨端仿制 ...

  4. 【hacker101 CTF】Photo Gallery

    0x01 打开首页看到 查看源代码,发现图片都是通过"fetch?id=1"这种方式加载的 简单测了一下存在SQL注入. 直接上sqlmap跑 第一个flag: ^FLAG^d45 ...

  5. 拖拽方式生成Vue用户界面

      前一阵子拜访了一些小伙伴,大家都表示苦前端太久了,需要花费不少时间在前端开发上.本着在不损失灵活性的前提下尽可能提高开发效率的原则,作者尝试在框架内集成了拖拽方式生成Vue用户界面的功能作为补充, ...

  6. Android 在活动中使用 Menu

    •前行必备--创建 menu 首先,新建一个项目,选择 Empty Activity 选项,并命名为 Test Menu: 这样 Android Studio 自动为我们新建 MainActivity ...

  7. c++一些概念

    面向对象语言三大特征: 封装,多态,继承 封装: 1.将函数定义到结构体内部,就是封装. 2.编译器会自动传递结构体的指针给函数. 类: 带有函数的结构体,称为类. 成员函数: 结构体里面的函数,称为 ...

  8. 关于误删除elasticSearch 索引,怎么能快速找回?

    背景 之前公司小王在工作中清理elasticSearch 索引,不小心使用脚本清空了最近使用的重要索引,导致开发无法准确的进行定位生产问题,造成了很大困扰. 当时我们的生产环境中是这样配置日志系统的: ...

  9. 以Aliyun体验机为例,从零搭建LNMPR环境(下)

    使用云服务器搭建 Web 运行环境,尤其是搭建常见的 LNMPR(Linux+Nginx+MySQL+PHP+Redis) 环境,对于开发人员是必备的职场基本技能之一.在这里,借着搭建我的" ...

  10. CentOS 7.6部署Vue + SrpingBoot + MySQL单体项目

    对于独立的项目(前端.后台单体服务.数据库),部署到新服务器上时,常常需要繁琐的配置与环境安装,这里介绍Centos 7.6下如何搭建基于Docker的环境,以及如何使用docker部署一套Vue + ...