`
buliedian
  • 浏览: 1223394 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

探索Android中的Parcel机制(下)

阅读更多

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

我们接下来要说的是Parcel类如何应用。就应用程序而言,最常见使用Parcel类的场景就是在Activity间传递数据。没错,在Activity间使用Intent传递数据的时候,可以通过Parcelable机制传递复杂的对象。

在下面的程序中,MyColor用于保存一个颜色值,MainActivity在用户点击屏幕时将MyColor对象设成红色,传递到SubActivity中,此时SubActivityTextView显示为红色的背景;当点击SubActivity时,将颜色值改为绿色,返回MainActivity,期望的是MainActivityTextView显示绿色背景。

来看一下MyColor类的实现代码:

该类实现了Parcelable接口,提供了默认的构造函数,同时也提供了可从Parcel对象开始的构造函数,另外还实现了一个static的构造器用于构造对象和数组。代码很简单,不一一解释了。

再看MainActivity的代码:

下面是SubActivity的代码:

下面是main.xml的代码:

注意的是在MainActivityonActivityResult()中,有一句color=data.getParcelableExtra("MyColor"),这说明的是反序列化后是一个新的MyColor对象,因此要想使用这个对象,我们做了这个赋值语句。

记得在上一篇《探索Android中的Parcel机制(上)》中提到,如果数据本身是IBinder类型,那么反序列化的结果就是原对象,而不是新建的对象,很显然,如果是这样的话,在反序列化后在MainActivity中就不再需要color=data.getParcelableExtra("MyColor")这句了。因此,换一种MyColor的实现方法,令其中的int color成员变量使用IBinder类型的成员变量来表示。

新建一个BinderData类继承自Binder,代码如下:

修改MyColor的代码如下:

去掉MainActivityonActivityResult()中的color=data.getParcelableExtra("MyColor")一句,变成:

再次运行程序,结果符合预期。

以上就是Parcel在应用程序中的使用方法,与Serialize还是挺相似的,详细的资料当然还是要参考Android SDK的开发文档了。

——欢迎转载,请注明出处 http://blog.csdn.net/caowenbin ——

分享到:
评论
1 楼 zx273064010 2011-08-18  
                       

相关推荐

    Android中Parcel用法详解

    本文实例讲述了Android中Parcel用法。分享给大家供大家参考,具体如下: Android 中Parcel 的使用,他是一个存储基本数据类型和引用数据类型的容器,在andorid 中通过IBinder来绑定数据在进程间传递数据。 Parcel ...

    探索Android中的Parcel机制.doc编程资料

    探索Android中的Parcel机制.doc

    Android开发之Parcel机制实例分析

    在Android开发中,Parcel机制是一种专为高效IPC(Inter-Process Communication,进程间通信)设计的序列化和反序列化机制。与Java中的常规序列化不同,Parcel并不适用于持久化存储,而是专注于在进程间快速传递数据...

    android 序列化之 parcel源码

    序列化之parcel的源码,anroid存储数据的一种方式,希望对你有用哦

    Android Binder机制

    Android Binder机制是Android系统的核心组件之一,它负责进程间通信(IPC,Inter-Process Communication),使得不同应用程序或者同一系统中的不同组件能够有效地交互。在Android系统中,由于每个应用程序运行在自己...

    AndroidBinder机制总结[归纳].pdf

    在Android系统中,Binder机制是实现进程间通信(IPC)的核心工具,尤其在跨应用程序组件交互时至关重要。本文将深入探讨Android Binder机制及其在组件化思想中的应用。 1. Android组件化思想 Android应用的组件化...

    parcel使用的demo

    Parcel是Android系统中一个用于序列化和反序列化对象的工具类,主要应用于跨进程通信(IPC)或者存储数据到Intent中。在Android开发中,当你需要将一个复杂的对象传递到另一个Activity或服务时,Parcel提供了高效且...

    native直接使用Parcel通信

    在Android系统中,IPC(Inter-Process Communication)是不同进程之间通信的重要手段,而Parcel则是Android IPC机制中用于数据序列化和反序列化的关键类。本项目中的"native直接使用Parcel通信"指的是在C/C++层(即...

    Android代码-auto-parcel

    AutoParcel AutoParcel is an AutoValue extension that enables Parcelable values generation. Just add implements Parcelable to your @AutoValue annotated models. @AutoValue abstract class Person ...

    xamarin学习笔记A17(安卓Parcel和IParcelable)

    本篇学习笔记主要聚焦于Xamarin中的Android平台,探讨了如何利用Parcel和IParcelable接口来实现对象的序列化和反序列化,以便在不同的组件或进程中传递数据。 Parcel是Android系统提供的一种轻量级的数据存储和传输...

    诠释Android中序列化的原理与机制

    接下来,我们讨论Parcelable,这是Android特有的序列化机制,主要用于内存中的对象传输,例如在Activity之间传递数据或者保存到Bundle中。相比于Serializable,Parcelable提供了更高的性能和更低的内存消耗。实现...

    Android深入浅出之Binder机制.pdf

    在Android系统中,Binder是实现进程间通信(IPC,Inter-Process Communication)的核心组件,它是一种轻量级的进程间通信机制,使得不同进程间的对象能够安全、高效地交互。理解Binder机制对于深入掌握Android系统...

    Android Binder 机制学习总结

    Android Binder是Android系统中核心的进程间通信(IPC,Inter-Process Communication)机制,它使得运行在不同进程中的组件能够高效、安全地交互。Binder机制是Android系统服务、应用程序组件以及其他系统组件之间...

    CDH5.16.1 集成Flink1.10.0 parcel文件

    1. **Parcel配置**:Parcel是CDH的一种软件分发机制,它允许管理员在集群中安装和管理软件包。首先,你需要下载与CDH5.16.1兼容的Flink1.10.0 parcel文件。这个压缩包中可能包含了必要的 parcel 文件,如 `flink-...

    CDH6.3.2集成flink1.14.5 parcel

    "Parcel"是CDH中用于分发和管理软件包的一种机制,类似于RPM或DEB包。 在描述中提到“实测可用,自己编译的”,意味着这个集成已经过实际测试,证明可以正常工作,并且Flink 1.14.5是作者自行编译以适应CDH 6.3.2...

    android的binder机制研究(C++部分).pdf

    Android系统中,Binder机制是一种核心的进程间通信(IPC)方式,它允许一个进程通过类似远程过程调用(RPC)的方式调用另一个进程中的方法。Binder机制不仅支持Java层的应用开发,也支持底层的C/C++开发。在Android...

Global site tag (gtag.js) - Google Analytics