在应用程序的某处,我需要使用 getString 方法获取本地化字符串作为错误消息。为此,我需要一个 Context 实例,例如从 Activity 中获取的实例。这真的是这样设计的吗?我是否真的被迫将这些对象传递给类和方法,或者我是否忽略了这一点,还有其他方法可以获取字符串引用吗?
澄清一下,在一个 Activity 中,我有一个内部 AsyncTask 子类,它在 doInBackground 中为 UI 线程外的一些短网络处理实例化一个新类。我希望将错误消息本地化,为此我需要将一个 Context 实例(换句话说,Activity)传递到该类中。从 XML 文件中获取值资源的设计似乎有点不直观。这让我想知道为什么它与 Context 实例如此耦合在一起,而不是静态的东西,或者 - 原谅我 - 一个单例,因为 Context 暗示是全局应用程序上下文,而不是像 Activity 那样只是它的一部分。
最佳答案
不,你不应该这样做。一个简单的规则是;如果您需要上下文的目的是接触 UI 或仅与 Activity 类的内部相关联,那么您应该使用 Activity 上下文。即便如此,重要的是任何对上下文的引用都不具有比 Activity 更长的生命周期。
不遵循这一点的最大危险是,您将对 Activity 上下文的引用传递到代码中更深的某个地方,并且您的 Activity 被销毁,而您持有的引用仍在范围内。您刚刚泄露了您的 Activity 及其引用的所有内容。我建议不要将 Activity 上下文传递到 Activity 之外,除非确实必要,即使那样,也要确保控制该生命周期。
因此,与 UI 无关的内容需要上下文,例如您需要获取字符串资源,然后使用应用程序上下文。在 Activity 内部,并且在 Activity 中声明字符串引用的地方,使用 Activity 上下文是可以接受的,在我看来,这是首选,因为您正在就范围和生命周期做出有意识的决定。
也就是说,您应该问问这个特定方法是否更适合放在 Activity 中。很可能不是,但请问问自己。
最后说一个小小的迂腐点。您不会在任何地方传递对象。您传递一个引用,实际上是对对象的引用值。 Java 中的一切都是按值传递的。
关于android - 我真的需要将 Context 实例深入到应用程序中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13298365/
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R