Android中Parcelable的使用

Android Serializable和Parcelable的区别及其使用 要将一个实现了Serializable接口的对象转换为Parcelable,我们首先需要为该对象实现Parcelable接口所规定的方法。为了实现Parcelable接口,一个类需要完成以下几个关键步骤:首先,它需要实现writeToParcel方法,该方法负责将对象的状态(即成员变量的值)写入到一个Parcel对象中。例如,在一个复杂的Android应用中,如果需要在多个Activity或Service之间频繁传递包含大量字段的自定义对象,使用Parcelable可以显著提升应用的响应速度和用户体验。 阅读详情

parcel定义介绍: 

   android提供了一种新的类型:parcel(英文解释:包裹,小包),本类用来封装数据的容器,封装后的数据可以通过Intent或IPC传递,除了基本类型外,只有实现了Parcelable接口的类才能放入parcel中。

    parcel一般都用在Binder通信,通过read和write方法进行客户端与服务端的数据传递(通信)。
        比如:frameworks层服务端与hardware客户端的Binder通信
                reply->writeInt32(getCardReaderSize());
                int mid = data.readInt32();
    用来存放parcel数据的是内存(RAM),而不是永远介质(Nand等)。

    parcelable定义了把数据写入parcel和从parcel读出数据的接口,一个类的实例,如果需要封装到消息中去,就必须实现这一接口,如果实现了这个接口,该类的实例就是可以“被打包”。

Parcelable的定义:

    下面我们看下parcelable的源码:
    
    内容描述接口,没什么作用
    
public int describeContents();
    写入接口函数,用来打包
    
public void writeToParcel(Parcel dest, int flags); 
    读取接口,目的是从parcel中构造一个实现了parcelable的类的实例对象,因为实现类这里是不可知的,所以需要用到模板的方法,继承类通过模板参数传入。
    为了能够实现模板参数的传入,定义了creator嵌入接口,内涵两个接入函数分别是单个和多个继承类实例。
    public interface Creator<T> {
         public T createFromParcel(Parcel source);
         public T[] newArray(int size);
    }
    还有一个子接口继承Creator,子接口只提供了一个函数,返回单个继承类实例
    public interface ClassLoaderCreator<T> extends Creator<T> 

Parcelable的实现使用:  

    Parcelabel 的实现,需要在类中添加一个静态成员变量 CREATOR,这个变量需要继承 Parcelable.Creator 接口。

packagecom.zlc.provider;
 
importandroid.os.Parcel;
importandroid.os.Parcelable;
 
publicclassStudents implementsParcelable{
    privateintstu_id;
    privateString stu_name;
    publicStudents(Parcel source){
        stu_id = source.readInt();
        stu_name = source.readString();
    }
    publicintgetStu_id() {
        returnstu_id;
    }
    publicvoidsetStu_id(intstu_id) {
        this.stu_id = stu_id;
    }
    publicString getStu_name() {
        returnstu_name;
    }
    publicvoidsetStu_name(String stu_name) {
        this.stu_name = stu_name;
    }
    @Override
    publicintdescribeContents() {
        // TODO Auto-generated method stub
        return0;
    }
    @Override
    publicvoidwriteToParcel(Parcel dest, intflags) {
        // TODO Auto-generated method stub
        dest.writeInt(stu_id);
        dest.writeString(stu_name);
    }
    //Interface that must be implemented and provided as a public CREATOR field that generates instances of your Parcelable class from a Parcel.
    publicfinalstaticParcelable.Creator<Students> CREATOR = newParcelable.Creator<Students>() {
 
        @Override
        publicStudents createFromParcel(Parcel source) {
            // TODO Auto-generated method stub
            returnnewStudents(source);
        }
 
        @Override
        publicStudents[] newArray(intsize) {
            // TODO Auto-generated method stub
            returnnewStudents[size];
        }
    };
}


Parcelable和Serializable的区别:


    android自定义对象可序列化有两个选择一个是Serializable和Parcelable

    一、对象为什么需要序列化
        1.永久性保存对象,保存对象的字节序列到本地文件。
        2.通过序列化对象在网络中传递对象。
        3.通过序列化对象在进程间传递对象。

    二、当对象需要被序列化时如何选择所使用的接口
        1.在使用内存的时候Parcelable比Serializable的性能高。
        2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC(内存回收)。

        3.Parcelable不能使用在将对象存储在磁盘上这种情况,因为在外界的变化下Parcelable不能很好的保证数据的持续性。


出处:http://my.oschina.net/zhoulc/blog/172163

现代控制理论(4)——李雅普诺夫稳定性理论 文章目录 阅读详情

相关推荐

从勒索软件攻击到数据重生:SQL Server MDF文件修复的实战生存指南

本文详细介绍了SQL Server MDF文件在遭遇勒索软件攻击后的修复策略,重点解析了Recovery Toolbox工具链的应用流程。从灾难评估到数据验证,提供分阶段修复操作、高级修复技术及防御加固方案,帮助企业快速恢复数据库并提升安全防护能力。

weixin_28327051的博客 715

kotlin 实现类Parcelize的问题

@Parcelize class Book(val title: String, val author: String, val year: Int) : Parcelable并且在app的build.gradle中添加androidExtensions { experimental = true }这时还会报错编译器会警告This class implements Parcelable ...

qq_33994844的博客 1989

超详细的YOLOv8项目组成解析:一站式指南了解其架构与组件

最近的更新是关于“Segment ONNX Runtime example”的,意味着它添加了对ONNX运行时的支持,特别是针对模型分割功能的支持。这些文件和文件夹共同工作,以确保 YOLOv8 的文档是全面的、多语言的,并且始终保持最新。这些示例涵盖了从基本的对象检测到更复杂的图像分割和视频处理任务,为开发者提供了丰富的学习资源和应用指导。最近的更新也是关于 ONNX 运行时示例。这些文件夹共同构成了 YOLOv8 的基础框架,从数据处理和模型配置到实际的训练和推理引擎,以及实用工具和高级功能的实现。

CDBmax的博客 1万+

Android-Parcelable理解与使用(对象序列化)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34168700的博客 314

深信服aCloud虚拟存储VS3.0实战:从数据分片到仲裁机制的全流程解析

本文深度解析了深信服aCloud虚拟存储VS3.0的核心架构与生产级实践。从数据分片、条带化写入、多副本机制到智能缓存分层,详细阐述了其如何实现高性能与高可靠性的平衡。同时,深入剖析了动态均衡、平滑扩容以及故障恢复与仲裁机制,为运维人员和技术决策者提供了在超融合基础架构(HCI)中部署和管理虚拟存储的实战指南。

net55的博客 588

STM32Cube高效开发教程<基础篇>(一)----概述

一、 STM32系列器件和开发工具发展历史声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。一、 STM32系列器件和开发工具发展历史。

我的博客 1171

android parcel 源码,Android Studio ParcelCreator Lint实现源码解析

效果图源码ParcelDetector.javaParcelDetector实现了JavaPsiScanner java文件检测接口核心代码@Nullable@Overridepublic List applicableSuperClasses() {return Collections.singletonList(CLASS_PARCELABLE);}@Overridepublic void c...

weixin_35544490的博客 345

(四) OpenClaw-Skill技能全面了解和自定义技能

OpenClaw Skills是提升AI代理功能性的关键模块。本文系统介绍了Skills的核心概念、获取渠道和创建方法。Skills作为标准化指令集合,能让OpenClaw从单纯理解升级为实际执行任务,相比传统System Prompt具有模块化、可复用等优势。用户可通过Clawhub官方商店、GitHub社区等渠道获取5700+现成技能,或按需开发自定义Skill。文章详细演示了创建"Hello World"示例技能的完整流程,包括编写Python脚本、配置SKILL.md文件、部署。

直到世界的尽头 8295

Android中Parcelable的原理和使用方法

Parcelable的简单介绍 介绍Parcelable不得不先提一下Serializable接口,Serializable是Java为我们提供的一个标准化的序列化接口,那什么是序列化呢? 进行Android开发的时候,无法将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。简单来说就是将对象转换为可以传输的二进制流(二进制序列)的过程,这样我们就可以通过序列化,转化为可以在网络传输或者保存到本地的流(序列),从而进行传

Dream It Possible 4万+

深度学习实战103-基于KDD Cup 99数据集的搭建神经网络的检测系统(NIDS),通过对网络流量数据进行分析,提供完整代码

接下来,我们定义一个全连接神经网络模型。return x# 创建数据集和数据加载器# 初始化模型通过以上步骤,我们实现了一个基于PyTorch的简单网络入侵检测系统。这个系统使用KDD Cup 99数据集进行训练和评估。实际应用中,您可以根据需求调整模型结构、超参数以及数据预处理方法。希望对大家有所帮助!如果有任何问题或需要进一步的解释,请随时咨询。

微学AI的博客 1582

基于STM32的太阳能充电宝设计_资料编号31

系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。电源供应:锂电池为系统供电,9 伏太阳能板经 5 伏降压稳压三极管降压为 5 伏后传送到 TP4056,TP4056 为锂电池供电,因锂电池电压 3.7 伏,通过 5 伏 DC 升压模块升压到 5 伏为整个系统提供 5 伏电压。

嵌入式阿齐Archie 1万+

Android 进阶——持久化存储序列化方案Serializable和IPC及内存序列化方案Parcelable详解与应用

持久化存储序列化方案Serializable和IPC及内存序列化方案Parcelable详解与应用

最美不过,心中有梦,身旁有你! 1207

基于MATLAB Simulink的电动汽车整车控制仿真

在本文中,我们选择了power_ElectricVehicle示例模型,该模型已经包含了电动汽车的基本组成部分,包括电机、变速器、驱动轮、电池等。例如,使用PID控制器来控制电机的转速,使用ABS控制器来控制车轮的制动力,使用转向控制器来控制车辆的转向角度,使用悬挂控制器来控制车轮的姿态等。通过建立模型和实现控制器,我们可以比较直观地了解电动汽车的工作原理和性能特点,并验证设计的控制系统在不同工况下的效果。而在电动汽车的开发中,整车控制系统是至关重要的一个组成部分,直接影响着电动汽车的性能和性价比。

qq_39605374的博客 1800

android.os.parcelable,Android中的Parcelable接口

Android中的android.os.Parcelable接口用于替代Java序列化Serializable接口,Fragment以及Activtity之间都需要传递数据,有时甚至包含结构非常复杂的对象,这就需要先将这个对象序列化成二进制流,然后再进行传递了。比如Fragment1向Fragment2传递数据,下面是Fragment1中创建Fragment2并传送数据的方法:Fragment2...

weixin_39943799的博客 491

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

android.os.parcelable,Android中Parcelable如可快速生成

之前都是自己手动实现,有时候属性比较多的时候,写着累就不说了,问题是修改的时候往往会忘记哦,然后用的时候就SB了。这种日子谁想继续呢,不要担心,大牛还是有的,于是乎就找到了“Android Parcelable code generator”这个插件。真是如获珍宝,ZTMD好用了。那就说说怎么在Android Studio中安装这个插件吧。第一步,就是打开“Setting”找到“Plugins”第...

weixin_39943586的博客 527

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android.os.parcelable,Android中Parcelable的作用实例解析

在android提供了一种类型:Parcel。被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。 除了基本类型以外,只有实现了Parcelable接口的类才能被放入Parcel中。Parcelable实现要点:需要实现三个东西1)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.声明如下:writeToParcel (Parcel dest, int...

weixin_31585653的博客 485

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android.os.Parcelable 接口的使用

什么是Parcelable ?      Parcelable,定义了将数据写入Parcel,和从Parcel中读出的接口。一个实体(用类来表示),如果需要封装到消息中去,就必须实现这一接口,实现了这一接口,该实体就成为“可打包的”了。   Parcelable 传递对象     Android序列化对象主要有两种方法:     1.实现Serializable接口,实现Serializ

moubenmao的专栏 1903

android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator错误解决

错误LOG:E/AndroidRuntime(14491): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.skyworth.system_monitor/com.skyworth.system_monitor.AppDetils}: android.os.BadParcelableException:

在路上 7628

android.os.parcelable,Android中的Parcelable和Serializable之间的区别

本示例演示了Android中可打包和可序列化之间的区别可序列化可序列化是一个可标记的接口,或者我们可以将其称为空接口。它没有任何预先实现的方法。可序列化将把一个对象转换为字节流。因此,用户可以在一个活动到另一个活动之间传递数据。可序列化的主要优点是创建和传递数据非常容易,但是与可打包相比,这是一个缓慢的过程。一个可序列化的简单示例,如下所示–importjava.io.Serializable;...

weixin_29603387的博客 277

android.os.parcelable,android.os.Parcelable[] cannot be cast to... Error - Stack Overflow

I'm doing a project for my class and I'm having an issue with it. I get the following error when I add a book There is a parcelable authors class that will be an array and a parcelable books class. ...

weixin_26776943的博客 597

android studio parcelable,Android中Parcelable的使用详解

Parcelable与SerializableSerializable是Java为我们提供的一个标准化的序列化接口。Parcelable是Android为我们提供的序列化的接口。对比:1、Parcelable相对于Serializable的使用相对复杂一些。2、Parcelable的效率相对Serializable也高很多。3、Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parc...

weixin_36487107的博客 548

Android 中Parcelable的作用

转载自:http://blog.sina.com.cn/s/blog_78e3ae430100pxba.html 非原创,摘自JAVAEYE android提供了一种新的类型:Parcel。本类被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。除了基本类型以 外,只有实现了Parcelable接口的类才能被放入Parcel中。 Parcelable实现...

dhonq48406的博客 85

android 如何使用Parcelable接口

今天,简单讲讲android如何使用Parcelable接口传递数据。 这个其实也很简单,之前我写过博客将关于Serializable接口传递对象,实现Parcelable接口也是为了传递对象,但效率更高,所以在网上查找了相关的资料,这里记录一下。   想要在两个activity之间传递对象,那么这个对象必须序列化,android中序列化一个对象有两种方式,一种是实现Serializable...

谢岩的博客 7320

Android中Parcelable使用

在android提供了一种类型:Parcel。被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。 除了基本类型以外,只有实现了Parcelable接口的类才能被放入Parcel中。   Parcelable实现要点:需要实现三个东西 1)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.声明如下: writeToParcel (Parce

u013714419的专栏 1145
上一篇: dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算
下一篇: Phone状态的监听机制
mydots
博客等级 码龄12年 39粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值