机器人 - 爪哇 - 通过意图,束或Parcelables并传递值?(android - java

2019-10-22 15:22发布

语境:

Android的

我读了很多的例子在网络上传递活动之间的DATAS。

我学到的是 :

  • 通过意图通过原始DATAS(intent.putExtra(键,值))
  • 捆绑原始DATAS并把它放在一个intent.putExtra(密钥,包对象)
  • Parcelables并 - >复杂的对象和原语。

之前你说,是的,我的确错过了一些东西。

题:

那么,它似乎有多种方式来达到同样的目的。

如果我想通过一个自定义的对象,Parcelable是我的男人。 但我仍然会为“序列化”,所以到了最后,我也会有原语,对吗?

要通过原语,我为什么要使用一个包时,直接在意图通过将它吗?

Android的文档/论坛/博客的例子没有做对我来说。 我的C背景仍持有我回了一下。

为什么有3点不同的方式来实现一个目标,顺便说一下?

Answer 1:

但我仍然会为“序列化”,所以到了最后,我也会有原语,对吗?

在Java中几乎一切最终归结为基元。

要通过原语,我为什么要使用一个包时,直接在意图通过将它吗?

无论哪种方式工作。 使用哪种让你感觉更舒服。 然而,只要留意上的按键冲突(例如,您的活动,那你继承你的,都试图把同样的事情在同一密钥的一些基本的活动IntentBundle )。

为什么有3点不同的方式来实现一个目标,顺便说一下?

我要去猜测,“一个目标”就是“从一个活动传递到另一个数据”。 涉及的进程间通信(IPC),即使这两种活动都在相同的过程中,作为核心OS过程参与路由。 对于从流以外几乎所有ContentProvider在标准的Android,IPC意味着数据必须被放入Parcel ,其被转换成字节数组用于使跨进程边界。

Parcelable表示可以添加到自定义类,让他们投入的适配Parcel

Bundle是实现一个具体的类Parcelable和代表HashMap状结构,但强类型到已知能够进入一个东西ParcelBundle比一个更方便的Parcel对于开发商来说,因为它提供了通过钥匙随机访问,其中Parcel没有。

Intent演员仅仅是一个Bundle ,为此, Intent暴露自己的访问方法。

我所有的情况下,我应该忘记其他可能性,并且只使用Parcelable?

据我所知,有什么EpicPandaForce指的是之间的比较SerializableParcelable 。 要么可以进入一个BundleParcel 。 在这两者中,所有其他条件相同, Serializable是比较慢的,因为它假定序列化形式必须是坚固耐用,能够数月或数年后再次读入。 Parcelable假定每个人都工作过相同的类定义的,可以绕过一些Serializable开销,作为一个结果。

话虽这么说,这是一个微型优化。

为什么其他的还在那里呢?

不是什么都可以制成延伸Parcelable ,尤其是java.*类。 Integer ,例如,是不是Parcelable 。 然而,我们希望能够通过intInteger数值周围。 因此, Parcel支持int一样, Bundle

你的意思是我应该拿回来与R.blah事

据我所知,在该意见,Marconcini先生指的是“ID”作为一个笼统的概念,不是指R.id值明确。 例如,如果你在保持图像的缓存,而不是绕过实际的Bitmap对象,通过周围的一些标识,它指向缓存。



Answer 2:

如果你传递的对象与非serializables建议使用Parcelable。 这意味着您可以实现对象的序列化表示自己以确保数据是你所期望的传递回和活动之间转发。

如果你传递一个简单的ID或串向后和向前通过各种手段使用intent.putExtra()

我发现这篇文章的题目是非常有用的,以帮助了解这些选项之间的差异和优势: http://www.developerphil.com/parcelable-vs-serializable/



文章来源: android - java - pass values through intents, bundles or Parcelables?