android 对象传输及parcel机制
在开发中不少要用到Activity直接传输对象,下面我们来看看,其实跟java里面差不多
自定义对象的传递:通过intent传递自定义对象的方法有两个
第一是实现Serialization接口;
第二是实现Parcelable接口;
下面来看个例子:
package com.example.bean;import java.io.Serializable;public class Bed implements Serializable {private String name;private int number;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}@Overridepublic String toString() {return "Name:" + getName() + ",Number:" + getNumber();}}
package com.example.bean;import android.os.Parcel;import android.os.Parcelable;public class Patient implements Parcelable {private String name;private int number;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}public static final Parcelable.Creator<Patient> CREATOR = new Parcelable.Creator<Patient>() {public Patient createFromParcel(Parcel p) {Patient patient = new Patient();patient.name = p.readString();patient.number = p.readInt();return patient;}public Patient[] newArray(int size) {return new Patient[size];}};@Overridepublic int describeContents() {return 0;}/****@desc 注:这里的write方法和createFromParcel里的一一对应,不然createFromParcel都是p.readString(),你怎么知道是哪一个**/@Overridepublic void writeToParcel(Parcel p, int flags) {p.writeString(name);p.writeInt(number);}@Overridepublic String toString() {return "Name:" + getName() + ",Number:" + getNumber();}}
TestActivity.java:StringBuilder sb = new StringBuilder();sb.append("Serializable Bed对象\n");Bed bed = (Bed) getIntent().getExtras().get("bed");sb.append(bed.toString());sb.append("\n\nList<Serializable Bed>集合\n");List<Bed> listBed = (List<Bed>) getIntent().getSerializableExtra("beds");for (int i = 0; i < listBed.size(); i++) {sb.append(listBed.get(i).toString() + ";");}sb.append("\n\nParcelable Patient对象\n");Patient patient = getIntent().getParcelableExtra("patient1");sb.append(patient.toString());sb.append("\n\nParcelable Patient byte[]\n");byte[] data = getIntent().getByteArrayExtra("patient2");if (data != null) {Parcel in = Parcel.obtain();in.unmarshall(data, 0, data.length);in.setDataPosition(0);patient = Patient.CREATOR.createFromParcel(in);}sb.append(patient.toString());sb.append("\n\nString数组\n");String[] str = getIntent().getStringArrayExtra("patients");for (int i = 0; i < str.length; i++) {sb.append(str[i]);}TextView tv = (TextView) findViewById(R.id.tv);tv.setText(sb);
android 对象传输及parcel机制相关推荐
- 探索Android中的Parcel机制(上)
一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化--,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态 ...
- 探索Android中的Parcel机制(上) .
一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化--,其作用是能将数据对象存入字节流当中,在需要时重新生成对象.主要应用是利用外部存储设备保存对象状态, ...
- 探索Android中的Parcel机制(下)
上一篇中我们透过源码看到了Parcel背后的机制,本质上把它当成一个Serialize就可以了,只是它是在内存中完成的序列化和反序列化,利用的是连续的内存空间,因此会更加高效. 我们接下来要说的是Pa ...
- 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路
原文地址: http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信(IPC)机制Binder简要介绍和学 ...
- Android进程间通信(IPC)机制Binder简要介绍和学习计划
在Android系统中,每一个应用程序都是由一些Activity和Service组成的,这些Activity和Service有可能运行在同一个进程中,也有可能运行在不同的进程中.那么,不在同一个进程的 ...
- Android源码分析 - Parcel 与 Parcelable
0. 相关分享 Android-全面理解Binder原理 Android特别的数据结构(二)ArrayMap源码解析 1. 序列化 - Parcelable和Serializable的关系 如果我们需 ...
- android对象序列化,Android序列化总结
前言 公园里,一位仙风鹤骨的老者在打太极,一招一式都仙气十足,一个年轻人走过去:"大爷,太极这玩意儿花拳绣腿,你练它干啥?"老者淡淡一笑:"年轻人,你还没有领悟到太极的真 ...
- Android应用中通过AIDL机制实现进程间的通讯实例
Android中,每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢?显然,Java中是不支持跨进程内存共享的,因此要传递对象,需要把对象解析成操作系统能够理解的数据格式,以达 ...
- Android 为什么要有handler机制?handler机制的原理
为什么要有handler机制? 在Android的UI开发中,我们经常会使用Handler来控制主UI程序的界面变化.有关Handler的作用,我们总结为:与其他线程协同工作,接收其他线程的消息并通过 ...
- Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...
最新文章
- 根据坐标获取地图经纬度
- 15年软件开发经验总结
- android studio替换jdk,Mac Android Studio JDK7 替换
- STL:Numberic_limit()
- 520送你一份WebStorm的主题包,附带使用图文教程
- find 排除_排列五248期定位预测,大师排除两头两尾
- 09-解决服务器被黑上不了网的问题
- virtuaBox 连接不上解决办法
- 华为笔试题2019年3月
- QQ浏览器怎么关闭云加速 QQ浏览器云加速关闭方法
- Linux基础知识-命令行
- codecombat极客战记森林61-70通关代码
- CSS文字的属性(总结)
- 正片工艺、负片工艺,这两种PCB生产工艺的差异到底是什么?
- 示波器常见的四种探头
- 鸿蒙适配倒计时,倒计时10天!鸿蒙系统传来好消息,华为大招正式亮相
- 如何判断程序的复杂程度:时间和空间复杂度
- Nginx实现XSS、SQL注入防护 —— 筑梦之路
- 《Python笔记》安装(pip)第三方包报错
- Sketch+摹客,100M文件上传最快47s