`
ai_longyu
  • 浏览: 516020 次
社区版块
存档分类
最新评论

Android中的Parcel是什么

 
阅读更多

Parcel,翻译过来是“打包”的意思。打包干什么呢?是为了序列化。

如果要在进程之间传递一个整数,很简单,直接传就是行了;如果要传一个字符串,就稍微复杂了点:需先分配一块可以容纳字符串的内存,然后将字符串复制到内存中,再传递(新手可能问:为啥不直接把字符串的引用传过去呢?学过C/C++的地球人都知道:进程有自己的内存地址空间,一个进程中的1000地址可能在另一个进程中是100000,java对象的引用跟本上还是内存地址);再如果要传递一个类的实例呢?也是先为类分配内存,然后复制一份再传递可以吗?我认为不可以,我至少可以找到一个理由:类中成员除了属性还有方法,即使属性能完整传过去,但还有方法呢?方法是独立于类对象存在的,所以到另一个进程中再引用同一个方法就要出错了,还是因为独立地址空间的原因。

Android开发中,很经常在各activity之间传递数据,而跟据Android的设计架构,即使同一个程序中的Activity都不一定运行在同一个进程中,所以处理数据传递时你不能老假设两个activity都运行于同一进程,那么只能按进程间传递数据来处理,使之具有最广泛的适应性。

  那么到底如何在进程之间传递类对象呢?简单来说可以这样做:在进程A中把类中的非默认值的属性和类的唯一标志打成包(这就叫序列化),把这个包传递到进程B,进程B接收到包后,跟据类的唯一标志把类创建出来,然后把传来的属性更新到类对象中,这样进程A和进程B中就包含了两个完全一样的类对象。

  下一篇再具体讲Parcel吧,待续...

分享到:
评论

相关推荐

    Android中Parcel用法详解

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

    android 序列化之 parcel源码

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

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

    探索Android中的Parcel机制.doc

    Android开发之Parcel机制实例分析

    为了使其他对象能够从Parcel中重建你的类实例,还需要实现一个静态内部类`CREATOR`,它是一个实现了`Parcelable.Creator`接口的匿名类。`Creator`有两个方法:`createFromParcel()` 和 `newArray()`。 `...

    native直接使用Parcel通信

    例如,你需要知道Parcel中的数据是如何存储的,然后在native层进行读写。这通常涉及到类型转换、内存分配和释放等操作,需要注意性能和内存管理的问题。 总的来说,"native直接使用Parcel通信"是一种高效且灵活的跨...

    parcel使用的demo

    `CREATOR`字段是一个工厂类,用于从Parcel中重建User对象。 现在,我们可以在Intent中使用这个User对象: ```java Intent intent = new Intent(currentActivity, NextActivity.class); intent.putExtra("user", ...

    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 ...

    mars android 第一季 第26集 代码

    在"Mars Android 第一季 第26集"中,我们主要探讨了Android应用程序开发中的关键概念,特别是服务(Service)的使用、数据传输(Transact)以及数据打包(Parcel)。这些是Android应用开发中不可或缺的部分,对于...

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

    Creator有两个重要的方法,一个是createFromParcel,用于从Parcel中创建新的对象;另一个是newArray,用于创建对象数组。 2. 实现WriteToParcel方法:在该方法中,你需要按照字段顺序依次将对象的属性写入Parcel。...

    Android 之 Parcelable 序列化

    在提供的资源文件`序列化流程图.PNG`中,可能详细展示了这些步骤,包括如何将对象的各个字段写入Parcel,以及如何按照特定顺序从Parcel中恢复它们。 为了提高效率,开发者应遵循一些最佳实践: - 使用`Parcelabler`...

    Android进程间通信 源码

    在Android系统中,进程间通信(Inter-Process Communication, 简称IPC)是一种关键的技术,它使得不同应用之间能够共享数据和实现功能交互。在这个"Android进程间通信源码"项目中,我们有两个主要的组件:...

    Android AIDL demo (Android Studio)

    在Android开发中,AIDL(Android Interface Definition Language)是一种用于实现进程间通信(IPC, Inter-Process Communication)的工具。本教程将详细讲解如何在Android Studio中创建并使用AIDL,以便不同进程间的...

    Android进程间传递对象

    首先,我们来理解什么是Parcelable。在Android中,Parcelable是比Serializable更高效的数据序列化方式,用于在内存中创建对象的二进制表示,便于在不同进程之间传递。为了使一个对象可被Parcelable,你需要实现...

    基于Android自带的Binder库,用C++来实现Binder应用程序的Demo.pdf

    首先,Binder是Android系统提供的一种进程间通信(IPC)机制,它允许一个进程中的代码调用另一个进程中的服务,就好比是远程过程调用(RPC)。Binder机制是Android框架中非常重要的组件,它用于实现Android系统服务...

    android AidlDemo(简单aidl的例子)

    - 系统将Parcel通过Binder机制传递到服务端,服务端反序列化Parcel中的数据并执行相应的方法。 - 方法执行完成后,结果被序列化回Parcel,再通过Binder返回给客户端。 7. **注意事项** - AIDL支持的数据类型有限...

    android中Intent传递对象的两种方法(Serializable,Parcelable)

    在Android开发中,Intent是应用程序之间以及应用程序内部组件之间通信的重要工具。它可以用来启动新的Activity、Service,或者在组件间传递数据。当我们需要在Intent中传递复杂对象时,有两种主要的方法:...

    move android binder to linux

    标题中的“move android binder to linux”意味着我们要探讨的是如何将Android系统的Binder通信机制移植到Linux环境中。Binder是Android系统中的核心组件,它负责进程间通信(IPC,Inter-Process Communication),...

    Android-Fit利用SharedPreferences存储对象

    在Android应用开发中,SharedPreferences是Android提供的一种轻量级的数据存储方式,主要用于存储一些简单的配置信息,如用户偏好设置、应用状态等。它基于XML文件,提供了键值对的存储方式,非常适合用来保存一些...

Global site tag (gtag.js) - Google Analytics