首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入了解Bundle和Map

如果你在Intent对象中附加的是一个Map最常见的接口实现类HashMap,而不是包含附加信息的自定义类,你是幸运的,你可以用以下方法将map附加到Intent对象: intent.putExtra...().getSerializableExtra("map"); 但是,如果你在Intent对象附加另一种类型的Map,比如:一个TreeMap(或者其他的自定义Map接口实现类),你在Intent中取出之前附加的...因为Map接口实现类都是Serializable的,而不是Parcelable的。...这就是为什么我们总是从Bundle中获得一个HashMap,同样的,如果你创建了一个实现了Parcelable自定义类型Map,得到的也是一个HashMap。...这种情况,要想到,Map接口实现类有一个构造器方法,可以将map作为参数传入,比如 new TreeMap(Map),你可以把从Bundle中取回的HashMap,用构造器的方式转成你想要的类型。

85161

Android 最全 Intent 传递数据姿势

1.传递序列化对象 1.1 方式一 这种方式比较简单,我们可以先将对象使用 Gson 先序列化成 Json 字符串,然后作为字符串来使用 Intent,这种方式的好处是不需要实现 Sereriable...Intent 的 putExtra 方法然后传递过去,Bundle 类默认也是已经实现了 Parcelable 接口的,所以可以传递 Bundle 对象。...Parcelable 接口的对象,这种方式比实现 Serializable 接口的方式稍微麻烦一点,需要重写方法,不过我们程序员都是比较懒的,给大家推荐一个插件: android-parcelable-intellij-plugin...,安装完之后就可以使用快捷键自动生成实现了 Serializable 接口的对象了,是不是比较方便。...Serializable 和 Parcelable 接口的区别: 在使用内存的时候,Parcelable 比 Serializable 性能高,所以推荐使用 Parcelable; Serializable

2.8K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    解决ANR、JVM、Serializable与Parcelable、红黑树、一道算法题

    Parcelable(Android 专用):除了Serializable之外,使用Parcelable也可以实现相同的效果, 不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解..., 而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。...区别: 在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。...实现: Serializable 的实现,只需要继承Serializable 即可。这只是给对象打了一个标记,系统会自动将其序列化。...群友补充 @Noble_JIE 从出生来来说,Serializable 是java的方法,Parcelable 是android独有的序列化反序列化方法。

    46820

    Intent传递数据全解

    传递对象的方式有两种:将对象转换为Json字符串或者通过Serializable,Parcelable序列化 不建议使用Android内置的抠脚Json解析器,可使用fastjson或者Gson第三方库...”); ④调用对象get方法获得相应参数 Parcelable实现: 一般流程: ①业务Bean继承Parcelable接口,重写writeToParcel方法,将你的对象序列化为一个Parcel...另外:Android中大量用到Parcelable对象,实现Parcable接口又是非常繁琐的,可以用到 第三方的开源框架:Parceler 可参考Android的Parcelable自动生成 两种序列化方式的比较...1)在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。...3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的 持续性在外界有变化的情况下。

    93540

    Android开发之漫漫长途 X——Android序列化

    其实不是的,同志们还记得上两篇出现的Parcel吗,Parcel是一个容器,他可以包含数据或者是对象引用,并且能够用于Binder的传输。...我们常常需要持久化一些对象,除了数据库等持久化方案之外,把对象转换成字节数组并通过流的方式存储在本地也是一个不错的方法,另外当我们需要通过Intent和Binder传输数据是就需要使用序列化后的数据。...使用Serializable来实现序列化相当简单,只需要在需要序列化的类实现Serializable接口并在其中声明一个类似下面的标识即可自动实现默认的序列化过程。...Android中的Parcelable 相对于Serializable而言,Parcelable的使用要复杂一些 public class Book implements Parcelable {...至此我们就得到了反序列化的对象 ---- 本篇总结 我们本篇详细分析了Android序列化相关知识,你可以使用Java中的Serializable也可以使用Parcelable。

    37920

    彻底理解Serializable和Parcelable

    Java中Serializable的序列化是怎么实现的? Android中Parcelable的序列化是怎么实现的? 有哪些使用场景,实现方式怎么选? em, 可以先思考一下这几个问题。...第三个问题:Android中Parcelable的序列化是怎么实现的?...所有对Parcelable对象的所有操作都是Parcel这个类来处理的。看一下WriteInt和WriteString的实现。...有哪些使用场景,实现方式怎么选? 我们日常用到的有二种场景。 数据的持久化保存,这里主要是指保存到文件 Android页面间数据的传递 先看第一种情况,将数据保存到文件。...为了使结果尽可能的准确一些,我分别使用Serializable和Parcelable写文件100次,每次写1000个对象,运行时间取平均值。

    1.1K30

    浅谈ViewModel

    1 主要功能 Activity、Fragment存活期间的数据存储; bind同一Activity的多个Fragment间数据共享; 独立或与LiveData配合实现代码解耦; 2 使用方法 1) 引入...ViewModel 在build.gradle中添加编译lifecycle.extensions module,该module同时包含ViewModel和LiveData: compile('android.arch.lifecycle...,且A、B均有读取、修改的业务需求; 传统实现方法1:Intent +onFragmentResult() 大致流程: 跳转时需要将数据按k-v封装入Bundle,或者将数据Parcelable传递给下个页面...传统实现方法2:数据对象SingleInstance、static 缺点: 数据的生命周期要自行控制; 容易内存泄漏; 同样麻烦,且有一定风险。...Bundle、Parcelable这些用起来很麻烦的控件; 数据生命周期由ViewModel内部掌控,无需手动管理销毁; 2) 与LiveData配合实现UI、业务逻辑分层 同为官方架构组件的LiveData

    2.7K90

    Android序列化权威面试指南,资深面试者的秘诀

    在Android开发中,Serializable与Parcelable是两种用于实现对象序列化的常见方式。在面试中,对于这两种技术的理解和应用能力常常被用来评估一个Android开发者的水平。...在Android中,推荐使用Parcelable来传递复杂对象,特别是在需要频繁传递对象时,Parcelable的性能更佳。...对于一些简单的对象,如配置信息等,可以考虑使用Serializable,但需要注意其性能影响。 问题: 如何实现一个复杂对象的Parcelable序列化?...数据结构的变化: 在使用Parcelable时,如果对象的数据结构发生变化,例如新增了字段或者改变了字段类型,需要手动修改Parcelable的实现,否则会导致反序列化失败。...参考简答: Serializable: 尽量减少需要序列化的对象属性 使用transient关键字标记不需要序列化的属性 使用自定义的序列化机制 Parcelable: 使用高效的数据结构定义对象 尽量减少需要序列化的对象属性

    14910

    Android 进阶7:进程通信之 AIDL 的使用

    我们可以利用它定义客户端与服务使用进程间通信 (IPC) 进行相互通信时都认可的编程接口。 在 Android 上,一个进程通常无法访问另一个进程的内存。...尽管如此,进程需要将其对象分解成操作系统能够识别的原语,并将对象编组成跨越边界的对象。 编写执行这一编组操作的代码是一项繁琐的工作,因此 Android 会使用 AIDL 来处理。...其他 AIDL 生成的接口 实现 Parcelable 的实体 AIDL 如何编写 AIDL 的编写主要为以下三部分: 创建 AIDL 创建要操作的实体类,实现 Parcelable 接口,以便序列化...Parcelable 接口是为了后序跨进程通信时使用。...2.编写服务端代码 创建 Service,在其中创建上面生成的 Binder 对象实例,实现接口定义的方法;然后在 onBind() 中返回 创建将来要运行在另一个进程的 Service,在其中实现了

    1.1K80

    Art of Android Development Reading Notes 2

    (2)Android系统不仅可以使用Binder机制来实现IPC,还可以使用Socket实现任意两个终端之间的通信。...2.3 IPC基础概念介绍 (1)Serializable接口是Java中为对象提供标准的序列化和反序列化操作的接口,而Parcelable接口是Android提供的序列化方式的接口。...中的IPC方式 (1)使用Bundle:Bundle实现了Parcelable接口,Activity、Service和Receiver都支持在Intent中传递Bundle数据。...1.AIDL支持的数据类型:基本数据类型、String和CharSequence、ArrayList、HashMap、Parcelable以及AIDL; 2.某些类即使和AIDL文件在同一个包中也要显式...(5)使用ContentProvider 1.ContentProvider主要以表格的形式来组织数据,并且可以包含多个表; 2.ContentProvider还支持文件数据,比如图片、视频等,系统提供的

    50920

    Android常见问题及开发经验总结(四)

    这个整理的知识点可能比较杂而且 没有什么顺序,希望大家见谅.. android中一般上拉加载下拉刷新都用什么实现?...里面为什么要设计出Bundle而不是直接用Map结构 Bundle内部是由ArrayMap实现的,ArrayMap的内部实现是两个数组,一个int数组是存储对象数据对应下标,一个对象数组保存key和value...而HashMap内部则是数组+链表结构,所以在数据量较少的时候,HashMap的Entry Array比ArrayMap占用更多的内存。...另外一个原因,则是在Android中如果使用Intent来携带数据的话,需要数据是基本类型或者是可序列化类型,HashMap使用Serializable进行序列化,而Bundle则是使用Parcelable...而在Android平台中,更推荐使用Parcelable实现序列化,虽然写法复杂,但是开销更小,所以为了更加快速的进行数据的序列化和反序列化,系统封装了Bundle类,方便我们进行数据的传输。

    42830

    跨进程访问(AIDL服务)

    bindService方法绑定AIDL服务,其中需要使用Intent对象指定AIDL服务的ID,也就是action标签中android:name属性的值 在绑定时需要一个ServiceConnection...和Map对象的元素类型必须是AIDL服务支持的数据类型,不需要import AIDL指定生成的接口,需要import 实现android.os.Parcelable接口的类,需要import ----...android.os.Parcelable接口的类,需要使用import导入这个类 如果方法的类型是非简单类型,例如String、List或者自定义的类,需要使用in 、out或者inout 进行修饰,...该接口用于序列化对象。在Android中之所以使用Parcelable接口序列化,而不是使用java.io.Serializable接口,主要是为了提高效率。..."/> ---- 小结 服务除了可以在内部调用,还可以使用AIDL服务实现跨应用的调用,其中的AIDL文件应用很广泛,可以利用AIDL文件自动生成接口文件,并可以将相应的对象转换成指定的接口,这大大方便了服务的调用

    84220

    面试涨薪攻略指南:Android面试必须掌握的那些Java知识点

    因为Androd使用Java语言来编程的,所以我们做Android开发全面的掌握Java基础是必须的。...修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法? Java中实现多态的机制是什么? 如何将一个Java对象序列化到文件里?...ConcurrentHashMap的实现原理 ArrayMap和HashMap的对比 HashTable实现原理 TreeMap具体实现 HashMap和HashTable的区别 HashMap与HashSet...Parcelable Android 序列化接口 效率高 使用麻烦 在内存中读写(AS有相关插件 一键生成所需方法) ,对象不能保存到磁盘中。 8、静态属性和静态方法是否可以被继承?是否可以被重写?...结语 对于Android开发工程师来书熟练掌握 Java 是很关键的,大公司不仅仅要求你会使用几个 API,更多的是要你熟悉源码实现原理,甚至要你知道有哪些不足,怎么改进,还有一些 Java 有关 的一些算法

    51410

    Android:IPC之AIDL的学习和总结

    在Android上,一个进程通常无法访问另一个进程的内存。...所以说,如果你想在一个进程中(例如在一个Activity中)访问另一个进程中(例如service)某个对象的方法,你就可以使用AIDL来生成这样的代码来伪装传递各种参数。...,里面的每个元素都必须被AIDL支持,包括key和value; 5、Parcelable:所有实现了Parcelable接口的对象; 6、AIDL:所有的AIDL接口本身也可以在AIDL文件中使用;...更多tag相关的内容:AIDL源码解析in、out和inout 使用AIDL实现IPC 实现步骤 (官网AIDL样例) // IRemoteService.aidl package com.example.android...//我们创建的是aidl数据对象,所以我们只需写出parcelable 后面跟对象名。

    1.4K20

    最新 Android 面试点梳理,我收藏了你呢?

    HashMap 、HashTable、HashSet HashMap(允许 key/value 为 null) 基于数组和单向链表实现,数组是 HashMap 的主体;链表是为解决哈希冲突而存在的,存放的是...(不允许 key/value 为 null) 数据结构和 HashMap 一样 线程安全 HashSet 基于 HashMap 实现,元素就是 HashMap 的 key,Value 传入了一个固定值...volatile想要解决的问题是,在另一个线程中想要使用instance,发现instance!=null,但是实际上instance还未初始化完毕这个问题。...Binder Android 中基于 C/S 结构的一种面向对象的进程间通信的机制 主要用在 system_server 进程与上层 App 层的 IPC 交互 包含:Client,Server,Binder...安装过程 首先要解压 APK,资源、so等放到应用目录 Dalvik 会将 dex 处理成 ODEX ;ART 会将 dex 处理成 OAT; OAT 包含 dex 和安装时编译的机器码 Android

    72021

    android基础部分再学习--AIDL

    它允许你定义客户端与服务端达成一致的程序接口使用进程间通信相互交流。 在ANdroid上面,一个进程不能正常的访问另一个进程的内存。...所以说,他们需要分解他们的对象为操作系统可以理解的基本单位,然后为你把这些对象按次序跨越进程边界 书写这些代码是单调冗长的,所以android使用AIDL为你处理这个问题。...2.实现接口 当你编译你的应用时,Android SDK工具生成一个.java接口文件用你的.aidl文件命名 生成的接口包含一个名字为Stub的子类(比如YourInterface.Stub),这是一个它父类的抽象实现...跨进程传递对象 ---- 如果你想通过IPC接口把一个类从一个进程传递到另一个进程中,那么是可以的。...为了建立一个支持Parcelable协议的类,你必须遵守下面的规则: 要实现Parcelable接口 实现writeToParcel,它是用来把对象的当前状态写入到一个Parcel对象中的。

    54720

    Android高频面试专题 - 基础篇(一)Activity

    (30 - 36) (4) ApplicationThread是一个binder对象,其运行在binder线程池中,内部包含一个H类,该类继承于类Handler。...为什么不用HashMap呢 Bundle内部是由ArrayMap实现的,ArrayMap的内部实现是两个数组,一个int数组是存储对象数据对应下标,一个对象数组保存key和value,内部使用二分法对key...另外一个原因,则是在Android中如果使用Intent来携带数据的话,需要数据是基本类型或者是可序列化类型,HashMap使用Serializable进行序列化,而Bundle则是使用Parcelable...而在Android平台中,更推荐使用Parcelable实现序列化,虽然写法复杂,但是开销更小,所以为了更加快速的进行数据的序列化和反序列化,系统封装了Bundle类,方便我们进行数据的传输 19.Activity...使用Intent传递数据是否有限制 & 如果传递一个复杂的对象,例如一个复杂的控件对象应该怎么做?

    2K31
    领券