最近面试官问了我一个很棘手的问题。 问题有几个部分。
我给出的答案 -
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/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr