我知道类似的问题已经被问过多次。我想我读了大部分。但没有一个答案是适用的。
我需要通过 Intent ( Activity 调用/广播)传递复杂的对象。一切都在我的过程中完成。这就是为什么我认为没有理由将我的对象写入 Streams 只是为了在几毫秒后重新组装它们。我想通过我的应用程序传递我的对象引用。有什么办法可以做到这一点。
因为我的应用程序会连续多次广播同一个事件,所以我不能依赖静态成员。我需要为我广播的内容获取完全相同的对象。
这就是为什么我在考虑一个静态的“Referenceholder”,它将接受一个对象并返回一个在它的内部列表中标识这个对象的整数,这样我就可以通过 .putExtras 传递这个整数。但据我所知 Java 我无法在添加该对象后从该列表中清除该对象,因为多个 Listener 可能对同一个对象感兴趣并且我必须将它永远保存在我的 Referenceholder 中(假设一个线程可以随时恢复 - 甚至 2 分钟后)。
有什么想法吗?难道我做错了什么?或者关于如何清理我的引用的任何想法(可能在几秒钟后?这可能会导致崩溃,但它似乎比编写无缘无故组装和重新组装我的对象的代码更适用)
最佳答案
您的选择非常明确:无法在 Intent 中传递不可编码的对象(Parcelable、Serializable)。句号。
您可以做的是传递一些对不可编码对象的引用。这个想法是,您将按照将键传递给映射的顺序执行某些操作,该映射将该键映射到您有兴趣传递的值。如果 Intent 发送者和 Intent 接收者都可以访问 map ,您可以传达对不可编码对象的引用。
我不明白为什么您认为静态成员不是您想要的。我猜想自定义应用程序对象中的静态 map 几乎正是您想要的。 ...我怀疑,根据您对 WeakHashMaps 的评论,您已经发现了这一点。
... 除了您到目前为止所说的没有任何内容可以解释为什么要使您的 map 变弱。在使用弱映射之前,请查看软引用,以确保这不是您的意思。
祝你好运
关于java - 在不实现 Serializable 或 Parcelable 的情况下在 Intent 中传递对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14917029/
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些
我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht