use*_*896 19 android sharedpreferences
例如,我可以使用和开始ApplicationContext工作吗?SharedPreferencesRemoteService
从逻辑上讲,我认为我可以.这种方法有细微差别吗?
Aja*_*her 13
正如Gunnar Karlsson提到的ContextWrapper的getApplicationContext()用法非常明确,你应该只使用Activity或者Service Context来注册/取消注册你的接收者,绑定/解除你的服务绑定(除非真的需要注册静态数据,而不是特定的组件)以避免不确定的内存泄漏并且即使您有时忘记取消注册也是安全的,系统会在警告的情况下为您清除它.
但是,因为getSharedPreferences(...)你可以随时使用ApplicationContext或Context不使用.的原因是,它已被明确提及  
对于任何特定的首选项集(此处为SharedPreferences),所有客户端共享此类的单个实例.
仅通过应用程序上下文获取引用将不会永久保留引用.它只是通过应用程序上下文引用首选项,就像其他任何一样.所以一旦用户完成它就会被清除.
请注意,通过应用程序上下文注册接收器将保持与您的应用程序关联的全局状态.所以永远不会为你清除它.
如果我错了,请有人纠正我.
希望这会帮助你.
Gun*_*son 10
您应该使用Activity或Service Context,即'this'除非您有明确而有力的理由不这样做.仅ApplicationContext在您明确需要引用应用程序的全局状态时才使用.
来自Android Developers API文档的ContextWrapper's getApplicationContext()方法:
这通常只应在需要生命周期与当前上下文分离的上下文时使用,该上下文与进程的生命周期而不是当前组件相关联.
和
使用ApplicationContext(...)[而不是例如活动或服务上下文]如果忘记取消注册,取消绑定等,很容易导致严重泄漏.
例如,要检索SharedPreferences在Activity以显示给用户如更改数据,使用this.getSharedPreferences(...),因为没有明确的理由,你为什么会需要挖掘到应用程序的生命周期.同样,在一个Service,使用this.getSharedPreferences(...).(请注意,活动和服务是上下文.它们间接延伸android.content.Context)
CommonsWare写了一个深入的答案:何时调用活动上下文或应用程序上下文?他在这里调用了getApplicationContext(),"is almost always wrong"并概述了使用它时的几个例外情况:
CommonsWare还链接到Android框架工程师Dianne Hackborn 的答案:
我会给你的第一条规则:如果你不知道为什么需要[Application Context],你可能不需要它(...)你唯一想要使用getApplicationContext()的时候就是你需要一个Context存在于Activity类(或其他组件)的生命周期之外.
关于同一主题的更多答案,讨论与以下问题有关的问题ApplicationContext:
| 归档时间: | 
 | 
| 查看次数: | 8756 次 | 
| 最近记录: |