繁体   English   中英

android-通过意图,捆绑或可打包商品传递值?

[英]android - java - pass values through intents, bundles or Parcelables?

内容:

安卓系统

我在网络上阅读了许多示例,这些示例用于在活动之间传递数据。

我学到的是 :

  • 通过Intents传递原始数据(intent.putExtra(key,value))
  • 捆绑原始数据并将其放入intent.putExtra(key,bundle对象)
  • 可打包->用于复杂的对象和基元。

在您说出来之前,是的,我当然错过了一些东西。

题:

好吧,似乎有多种方法可以实现相同的目标。

如果我想传递自定义对象,那么我可以使用Parcelable。 但是我仍然必须对其进行“序列化”,所以最后,我还将具有基元,对吗?

要传递原语,为什么在直接传递intent时也会使用bundle?

android文档/论坛/博客示例对我而言并非如此。 我的C背景仍然使我有些退缩。

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

但是我仍然必须对其进行“序列化”,所以最后,我还将具有基元,对吗?

Java中的几乎所有内容最终都可以归结为原始类型。

要传递原语,为什么在直接传递intent时也会使用bundle?

不管哪种方法。 使用任何一种会使您感觉更舒适。 但是,只需要注意键上的冲突(例如,您的活动以及您继承自您的活动的一些基本活动,都试图将同一事物放入IntentBundle的同一键中)。

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

我将猜测“一个目标”是“将数据从一项活动传递到另一项活动”。 即使两个活动处于同一进程中,这也涉及进程间通信(IPC),因为路由中涉及核心OS进程。 对于标准Android中ContentProvider中流之外的几乎所有内容,IPC意味着必须将数据放入Parcel ,该数据将转换为字节数组以跨进程边界传递。

Parcelable表示一个接口,可以将其添加到自定义类中以允许将它们放入Parcel

Bundle是一个具体的类,它实现Parcelable并表示类似HashMap的结构,但是强类型化为已知能够放入Parcel 对于开发人员而言, BundleParcel更为方便,因为Bundle提供了通过密钥进行随机访问的权限,而Parcel则不然。

Intent Extras仅仅是Bundle ,为此Intent公开了自己的访问器方法。

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

据我所知,有什么EpicPandaForce指的是之间的比较SerializableParcelable 可以放入BundleParcel 在所有其他条件相同的情况下, Serializable的速度较慢,因为它假定序列化的形式必须是持久的,并且可以在数月或数年后再次读取。 Parcelable假定每个人都在使用相同的类定义,因此可以绕过一些Serializable开销。

话虽如此,这是一个微观优化。

那为什么还在那里呢?

并非可以做所有事情来扩展Parcelable ,尤其是java.*类。 例如, Integer不是Parcelable 但是,我们希望能够传递intInteger值。 因此, Parcel int Bundle支持int

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

AFAIK在该评论中,Marconcini先生将“ id”作为一般概念,而不是专门指R.id值。 例如,如果要维护图像缓存,而不是传递实际的Bitmap对象,则传递一些指向该缓存的标识符。

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

如果您一定要来回传递简单的id或字符串,请使用intent.putExtra()

我发现有关该主题的这篇文章对帮助理解选项之间的区别和好处非常有用: http : //www.developerphil.com/parcelable-vs-serializable/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM