dod*_*gel 13 architecture android android-context android-activity
在应用程序的某个地方,我需要使用getString方法获取本地化字符串以获取错误消息.为此,我需要一个Context实例,例如来自一个Activity.这真的是这个设计的吗?我真的被迫将这些对象传递给类和方法,或者我错过了这一点,还有其他方法来获取字符串引用吗?
为了澄清,在一个Activity中,我有一个内部AsyncTask子类,在doInBackground中实例化一个新类,用于UI线程之外的一些短网络处理.我希望错误消息被本地化,为此我需要将Context实例(换句话说,Activity)传递到该类中.从XML文件中获取价值资源的设计似乎有点不直观.它让我想知道为什么它与Context实例结合在一起而不是静态的东西或者 - 请原谅我 - 一个单例,因为Context暗示是全局应用程序上下文而不仅仅是一个Activity的一部分.
不,你不应该这样做.一个简单的规则是; 如果您需要的上下文是触摸UI或仅与活动类的内部相关联,那么您应该使用活动上下文.即便如此,重要的是对上下文的任何引用都没有比活动更大的生命周期.
不遵循这一点的重大危险是,您将对活动上下文的引用传递到代码中更深处的某个位置,并且您的活动被销毁,而您所持有的引用仍在范围内.您刚刚泄露了您的活动以及它所引用的所有内容.我建议不要将活动上下文传递到活动之外,除非真正必要,即使这样,也要非常确定能够控制生命时间.
因此,对于与UI无关的内容需要上下文,例如您需要获取字符串资源,然后使用应用程序上下文.在活动内部,以及在活动中声明字符串引用的地方,然后使用活动上下文是可以接受的,并且在我看来,首选,因为您正在有意识地决定范围和生命时间.
也就是说,您应该问这种特定方法是否更适合放在一项活动中.它可能不是,但要问问自己.
最后,一个小迂腐点.您不会在任何地方传递对象.传递引用,实际上是对象引用的值.Java中的所有内容都是按值传递的.
| 归档时间: |
|
| 查看次数: |
1839 次 |
| 最近记录: |