- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
最近面试官问了我一个很棘手的问题。问题有几个部分。
我给出的答案 -
Parcelable gives the capability to developers to restrict object creation which in a way makes it faster to use.
我对此感到困惑,所以决定确定使用可序列化和可打包之间的区别:p(聪明的 huuuhhh!), http://www.developerphil.com/parcelable-vs-serializable/使用了这个引用。
我给的答案-
because String/int is a primitive data-type, if we had used the Wrapper class directly, might be possible we had to use parcelable(I am not sure on that part)
Google 后我没有得到任何有用的链接,而且我或面试官对答案不太满意。如果你们能提供帮助,那就太好了!
最佳答案
Why (question is why and not how) do you need to parcel objects while sending from one activity to another and not send directly
打包/序列化对象并不像您猜想的那样提高速度。
当您在 Activity 之间发送数据时,尤其是在不同的应用程序之间(请记住,Intent
对象不仅用于您自己的 Activity 之间的通信,还用于您和其他应用程序之间的通信其他应用程序也是如此),您不能期望发送方和接收方可以访问相同的内存地址空间。
Android 的文档指出应用程序在它们自己的独立内存空间中运行。这是文档中对此效果的引用:
Each process has its own virtual machine (VM), so an app's code runs in isolation from other apps.
所以当你想发送一个对象 myObject
到一些接收 Activity
时,你不能发送它的引用/指针,因为接收者不一定有权访问指针指定的位置。相反,您必须发送接收方可以访问和使用的 myObject
的一些表示形式——这就是为什么您需要将数据编码 成一种可以< strong>unmarshalled,最简单的方法是简单地让对象的类实现 Serializable
,这让 Java 尽最大努力将对象转换为字节数组可以很容易地发送给接收者并由接收者解码。但是由于 Serializable
使用反射,所以速度很慢。
您可以使用其他更快的方式来编码数据——例如,一种方法是使用 Gson
之类的库将对象转换为其 JSON
表示形式,并且只需发送它即可,因为任何 JSON
文档都可以表示为 String
并可轻松转换回 Java Object
。另一种方法(在几乎所有情况下可能更快)是使用 Parcelable
接口(interface),它可以让您准确地指定您希望如何编码数据以及准确地 它应该如何解码。它基本上可以让您更好地控制对象的传输。
使用 tl:dr: Parcelling/Serializing 等是因为你不能发送内存地址,所以你必须发送对象的实际数据,它必须以某种方式表示形式。
While using Bundle, when we use String, int we do not need to parcel the data, so do you think the String/int is by default internally parcelled ?
Bundle
的内部工作方式是将所有内容放入 Map
并根据需要(即调用 get/put 时)打包/解包数据。要将 Objects 放入 Bundle
中,对象的类需要实现 Serializable
或 Parcelable
,因为它需要告诉Bundle
它应该如何在内部编码/解码。
但是原始类型和字符串足够简单并且使用得足够频繁,以至于开发人员不需要指定如何需要发生和Bundle
为它提供了方便的方法。我无法在最低级别上给你一个可靠的答案,因为很多 Parcel
代码都是本地实现的,我在网上找不到,但它们肯定是直接的转换为它们的字节表示形式。
关于android - 将android中的对象打包以从一个 Activity 转移到另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30760685/
如果我将我的个人 repo 转移到一个组织(由我创建),我将失去所有 见解 例如来自原始 Repo 的流量历史记录、拉取请求、贡献者、 fork 等? 最佳答案 拉取请求被保留:参见“About re
如何为解析 if-then[-else] 案例制定正确的规则?这是一些语法: { module TestGram (tparse) where } %tokentype { String }
如何为解析 if-then[-else] 案例制定正确的规则?这是一些语法: { module TestGram (tparse) where } %tokentype { String }
我读过有关mutex的信息,这些信息由线程拥有,并且只能由拥有的线程使用。在this answer中,该解决方案建议每个进程在发出互斥信号之前,必须拥有互斥锁的所有权。我必须在这里承认自己的愚蠢,不知
我只能从回调函数之一中想到 curl_close() 。 但是 php 抛出了一个警告: PHP 警告:curl_close():尝试从回调中关闭 cURL 句柄。 任何想法如何做到这一点? 最佳答案
带有冲突的语法的精简版本: body: variable_list function_list; variable_list: variable_list variable | /* empty
我创建了新的开发者帐户,然后将应用程序转移到新帐户。然后我在新帐户下创建了相同的标识符。并构建App并上传到AppStore。 I have got the warning with WARNING
我想像这样管理类主任的所有 Activity : 此外所有 Activity 都扩展基本 Activity 以使用公共(public) View 。 在这种情况下,我想处理传输 Activity ,例
使用 C 中的简单链表实现,我如何告诉 Splint 我正在转让 data 的所有权? typedef struct { void* data; /*@null@*/ void* ne
请参阅以下 yacc 代码。如果我删除生产因素:'!' expr,解析冲突消失。这里发生了什么? %{ #include #include %} %token TRUE %token FALSE
是否可以将 props 向下传输到子组件,其中 { ..this.props } 用于更简洁的语法,但是排除某些 props,如 className 或 id? 最佳答案 您可以使用解构来完成这项工作
如果我有以下数据框: date A B M S 20150101 8 7 7.5 0 20150101 10 9 9
我需要将一个 __m128i 变量(比如 v)移动 m 位,以便位移动所有变量(因此,结果变量表示 v*2^m)。执行此操作的最佳方法是什么?! 请注意 _mm_slli_epi64 分别移动 v0
我需要这样调用我的程序: ./program hello -r foo bar 我从 argv[1] 中打招呼,但我在使用值 bar 时遇到问题,我是否也应该将“r:”更改为其他内容? while((
我是新来的 Bison我在转换/减少冲突方面遇到了麻烦...我正在尝试从文件加载到 array data[] : struct _data { char name[50]; char sur
当然有很多关于解决移位/归约错误的文档和方法。 Bison 文档建议正确的解决方案通常是%期待它们并处理它。 当你遇到这样的事情时: S: S 'b' S | 't' 您可以像这样轻松解决它们: S:
我有以下(大量精简的)快乐语法 %token '{' { Langle } '}' { Rangle } '..' { DotDot } '::' { ColonC
我的 Bison 解析器中有很多错误,即使它运行良好,我也想了解这些冲突。代码如下: 词法分析器: id ([[:alpha:]]|_)([[:alnum:]]|_)* %% {id
在我的项目中,我有这样的情况,一个 Activity 应该将值(value)转移到另一个 Activity 。并且根据这个值应该选择需要的菜单元素。我试图在 bundle 的帮助下做到这一点,但我不知
我一直在阅读 NSIndexPaths 以获得 uitableviews 等。但是我很难操纵现有的索引路径。 我想在保留行的同时采用现有的索引路径递增/移动每个部分。因此 indexPath.sect
我是一名优秀的程序员,十分优秀!