Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android-java-通过意向、捆绑包或包裹传递值? 背景:_Java_Android_Android Intent_Bundle_Parcelable - Fatal编程技术网

android-java-通过意向、捆绑包或包裹传递值? 背景:

android-java-通过意向、捆绑包或包裹传递值? 背景:,java,android,android-intent,bundle,parcelable,Java,Android,Android Intent,Bundle,Parcelable,安卓 我在网上读了很多在活动之间传递数据的例子 我学到的是: 通过intent intent.putExtrakey,value传递原始数据 捆绑原始数据并将其放入一个intent中 地块->用于复杂对象和基本体。 在你说之前,是的,我确实错过了一些东西 问题: 嗯,似乎有多种方法可以实现同一个目标 如果我想传递一个自定义对象,我需要一个包裹。但是我仍然需要序列化它,所以最后,我还需要原语,对吗 为了传递原语,在直接传递时为什么要使用bundle呢 android文档/论坛/博客示例并不适合我。

安卓

我在网上读了很多在活动之间传递数据的例子

我学到的是:

通过intent intent.putExtrakey,value传递原始数据 捆绑原始数据并将其放入一个intent中 地块->用于复杂对象和基本体。 在你说之前,是的,我确实错过了一些东西

问题: 嗯,似乎有多种方法可以实现同一个目标

如果我想传递一个自定义对象,我需要一个包裹。但是我仍然需要序列化它,所以最后,我还需要原语,对吗

为了传递原语,在直接传递时为什么要使用bundle呢

android文档/论坛/博客示例并不适合我。我的C语言背景仍然让我有点犹豫

顺便问一下,为什么要用三种不同的方式来实现一个目标

但是我仍然需要序列化它,所以最后,我还需要原语,对吗

Java中几乎所有的东西最终都归结为原语

为了传递原语,在直接传递时为什么要使用bundle呢

两种方法都有效。使用任何让你感觉更舒服的。但是,请注意键上的冲突,例如,您的活动和您继承的某个基本活动,两者都试图将相同的内容放在Intent或Bundle的同一个键中

顺便问一下,为什么要用三种不同的方式来实现一个目标

我想一个目标是将数据从一个活动传递到另一个活动。这涉及进程间通信,即使这两个活动在同一进程中,因为路由中涉及一个核心操作系统进程。对于标准Android中ContentProvider的流之外的几乎所有内容,IPC意味着必须将数据放入一个包中,该包被转换为字节数组以通过进程边界

Parcelable表示可以添加到自定义类中的接口,以允许将它们放入地块中

Bundle是一个具体的类,它实现了Parcelable,并表示类似HashMap的结构,但强类型表示已知能够进入包裹的内容。对于开发人员来说,Bundle比packet更方便,因为它提供了按键随机访问,而packet不提供

Intent extra只是一个Bundle,Intent为其公开了自己的访问器方法

对于我所有的情况,我应该忘记其他可能性,只使用Parcelable

好吧,EpicPandaForce所指的是可序列化和可打包之间的比较。可以打包,也可以包裹。在这两种情况中,其他条件都相同的情况下,Serializable的速度较慢,因为它假定序列化的表单必须是持久的,能够在几个月或几年后再次读取。Parcelable假设每个人都使用相同的类定义,因此可以绕过一些可序列化的开销

也就是说,这是一个微观优化

为什么另一个还在那里

并不是所有东西都可以扩展Parcelable,特别是java.*类。例如,整数是不可分包的。然而,我们希望能够传递int和整数值。因此,Parcel和Bundle都支持int

你的意思是我应该把它和R.blah的东西一起拿回来

AFAIK,Marconcini先生在评论中提到id是一个一般概念,而不是具体提到R.id值。例如,如果要维护图像缓存,而不是传递实际的位图对象,请传递一些指向缓存的标识符

但是我仍然需要序列化它,所以最后,我还需要原语,对吗

Java中几乎所有的东西最终都归结为原语

为了传递原语,在直接传递时为什么要使用bundle呢

两种方法都有效。使用任何让你感觉更舒服的。但是,请注意键上的冲突,例如,您的活动和您继承的某个基本活动,两者都试图将相同的内容放在Intent或Bundle的同一个键中

顺便问一下,为什么要用三种不同的方式来实现一个目标

我想一个目标是将数据从一个活动传递到另一个活动。这涉及进程间通信,即使这两个活动在同一进程中,因为路由中涉及一个核心操作系统进程。对于标准Android中ContentProvider的流之外的几乎所有内容,IPC意味着必须将数据放入一个包中,该包被转换为字节数组以通过进程边界

Parcelable表示可以添加到自定义类以允许放置它们的接口 塞进一个包裹

Bundle是一个具体的类,它实现了Parcelable,并表示类似HashMap的结构,但强类型表示已知能够进入包裹的内容。对于开发人员来说,Bundle比packet更方便,因为它提供了按键随机访问,而packet不提供

Intent extra只是一个Bundle,Intent为其公开了自己的访问器方法

对于我所有的情况,我应该忘记其他可能性,只使用Parcelable

好吧,EpicPandaForce所指的是可序列化和可打包之间的比较。可以打包,也可以包裹。在这两种情况中,其他条件都相同的情况下,Serializable的速度较慢,因为它假定序列化的表单必须是持久的,能够在几个月或几年后再次读取。Parcelable假设每个人都使用相同的类定义,因此可以绕过一些可序列化的开销

也就是说,这是一个微观优化

为什么另一个还在那里

并不是所有东西都可以扩展Parcelable,特别是java.*类。例如,整数是不可分包的。然而,我们希望能够传递int和整数值。因此,Parcel和Bundle都支持int

你的意思是我应该把它和R.blah的东西一起拿回来


AFAIK,Marconcini先生在评论中提到id是一个一般概念,而不是具体提到R.id值。例如,如果要维护图像缓存,而不是传递实际的位图对象,请传递指向缓存的某个标识符。

如果要传递不可序列化的对象,建议使用Parcelable。这意味着您可以自己实现对象的可序列化表示,以确保数据是您期望在活动之间来回传递的数据

如果您正在通过各种方式前后传递简单id或字符串,请使用intent.putExtra

我发现这篇关于该主题的文章非常有用,有助于理解选项之间的差异和好处:

如果要传递具有非序列化功能的对象,建议使用Parcelable。这意味着您可以自己实现对象的可序列化表示,以确保数据是您期望在活动之间来回传递的数据

如果您正在通过各种方式前后传递简单id或字符串,请使用intent.putExtra

我发现这篇关于该主题的文章非常有用,有助于理解选项之间的差异和好处:

可包裹更有效。用来制作你的包裹。包裹可以装包裹,就是这样吗?对于我所有的情况,我应该忘记其他可能性,只使用Parcelable?为什么另一个还在那里?向后兼容?或者更好,不要在活动之间传递大对象,而是传递id并从缓存中检索对象,诸如此类@MartínMarconcini:这非常有趣=>你的意思是我应该用R.blah的东西把它拿回来?我不知道你想通过什么,但是序列化的整个概念会产生很多开销。对于一些小事情来说,这可能没问题,但也许你应该问问自己,为什么我需要在活动之间传递这个复杂的对象?如果有一个公共的地方缓存不是更好更干净吗?这些东西存放在哪里,而我只有一个简单的方法来检索它们?然后只传递一个整数或带键的字符串。我的评论并没有直接回答你的问题,但应该给你另一个观点,Parcelable更有效。用来制作你的包裹。包裹可以装包裹,就是这样吗?对于我所有的情况,我应该忘记其他可能性,只使用Parcelable?为什么另一个还在那里?向后兼容?或者更好,不要在活动之间传递大对象,而是传递id并从缓存中检索对象,诸如此类@MartínMarconcini:这非常有趣=>你的意思是我应该用R.blah的东西把它拿回来?我不知道你想通过什么,但是序列化的整个概念会产生很多开销。对于一些小事情来说,这可能没问题,但也许你应该问问自己,为什么我需要在活动之间传递这个复杂的对象?如果有一个公共的地方缓存不是更好更干净吗?这些东西存放在哪里,而我只有一个简单的方法来检索它们?然后只传递一个整数或带键的字符串。我的评论并没有直接回答你的问题,但应该给你另一个观点是的,谢谢大家,我指的正是这个。传递密钥并再次检索。在我看来,就一件小事而言,传递一个可序列化/可分配的对象是可以的,但在大多数情况下,最好保持所有内容的整洁,并且只使用一个可靠的缓存/检索机制
如何只发送int,这将是一个对象的唯一id?@Larry:我如何通过一个两个活动都能理解并找到/重建的id将它传递给另一个活动在很多情况下,这样做效果很好,通常是因为您已经有了一些集中的数据存储,例如单例缓存管理器。@Larry:所以我计划传递的每个项目都应该创建并驻留在单例中—可能不是。每个词都是一个很强的词。不同的情况需要不同的方法。@Larry看一下Realm DB Realm.io是URL。这是一种保存信息的非常简单的方法,无需处理SQLite。是的,感谢Commons,我正是指这个。传递密钥并再次检索。在我看来,就一件小事而言,传递一个可序列化/可分配的对象是可以的,但在大多数情况下,最好保持所有内容的整洁,并且只使用一个可靠的缓存/检索机制。难道没有一种方法只发送一个int,哪一个是一个对象的唯一id?@Larry:我如何通过一个两个活动都能理解并找到/重建的id将它传递给另一个活动在很多情况下,这样做效果很好,通常是因为您已经有了一些集中的数据存储,例如单例缓存管理器。@Larry:所以我计划传递的每个项目都应该创建并驻留在单例中—可能不是。每个词都是一个很强的词。不同的情况需要不同的方法。@Larry看一下Realm DB Realm.io是URL。这是一种保存信息的非常简单的方法,无需处理SQLite。