在开发中不少要用到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机制相关推荐

  1. 探索Android中的Parcel机制(上)

    一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化--,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态 ...

  2. 探索Android中的Parcel机制(上) .

    一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化--,其作用是能将数据对象存入字节流当中,在需要时重新生成对象.主要应用是利用外部存储设备保存对象状态, ...

  3. 探索Android中的Parcel机制(下)

    上一篇中我们透过源码看到了Parcel背后的机制,本质上把它当成一个Serialize就可以了,只是它是在内存中完成的序列化和反序列化,利用的是连续的内存空间,因此会更加高效. 我们接下来要说的是Pa ...

  4. 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路

    原文地址: http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信(IPC)机制Binder简要介绍和学 ...

  5. Android进程间通信(IPC)机制Binder简要介绍和学习计划

    在Android系统中,每一个应用程序都是由一些Activity和Service组成的,这些Activity和Service有可能运行在同一个进程中,也有可能运行在不同的进程中.那么,不在同一个进程的 ...

  6. Android源码分析 - Parcel 与 Parcelable

    0. 相关分享 Android-全面理解Binder原理 Android特别的数据结构(二)ArrayMap源码解析 1. 序列化 - Parcelable和Serializable的关系 如果我们需 ...

  7. android对象序列化,Android序列化总结

    前言 公园里,一位仙风鹤骨的老者在打太极,一招一式都仙气十足,一个年轻人走过去:"大爷,太极这玩意儿花拳绣腿,你练它干啥?"老者淡淡一笑:"年轻人,你还没有领悟到太极的真 ...

  8. Android应用中通过AIDL机制实现进程间的通讯实例

    Android中,每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢?显然,Java中是不支持跨进程内存共享的,因此要传递对象,需要把对象解析成操作系统能够理解的数据格式,以达 ...

  9. Android 为什么要有handler机制?handler机制的原理

    为什么要有handler机制? 在Android的UI开发中,我们经常会使用Handler来控制主UI程序的界面变化.有关Handler的作用,我们总结为:与其他线程协同工作,接收其他线程的消息并通过 ...

  10. Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

最新文章

  1. 根据坐标获取地图经纬度
  2. 15年软件开发经验总结
  3. android studio替换jdk,Mac Android Studio JDK7 替换
  4. STL:Numberic_limit()
  5. 520送你一份WebStorm的主题包,附带使用图文教程
  6. find 排除_排列五248期定位预测,大师排除两头两尾
  7. 09-解决服务器被黑上不了网的问题
  8. virtuaBox 连接不上解决办法
  9. 华为笔试题2019年3月
  10. QQ浏览器怎么关闭云加速 QQ浏览器云加速关闭方法
  11. Linux基础知识-命令行
  12. codecombat极客战记森林61-70通关代码
  13. CSS文字的属性(总结)
  14. 正片工艺、负片工艺,这两种PCB生产工艺的差异到底是什么?
  15. 示波器常见的四种探头
  16. 鸿蒙适配倒计时,倒计时10天!鸿蒙系统传来好消息,华为大招正式亮相
  17. 如何判断程序的复杂程度:时间和空间复杂度
  18. Nginx实现XSS、SQL注入防护 —— 筑梦之路
  19. 《Python笔记》安装(pip)第三方包报错
  20. Sketch+摹客,100M文件上传最快47s

热门文章

  1. 深入理解jQuery插件开发(讲解jQuery开发的好文)
  2. myeclipse 运行servlet
  3. 双系统安装:Deepin 尝鲜
  4. uboot引导内核全过程
  5. Linux进程调度技术的前世今生
  6. 传输层协议(11):超时重传
  7. RTL8211E应用(二)之信号输入、输出接口
  8. linux内存寻址解析 (二)
  9. SylixOS 内存管理-通过地址反查页面控制块-vmmArea.c
  10. GUI实现学生点名系统