Mr_*_*s_D 5 android android-preferences
设计问题基本上 - 有一个PreferenceActivity应该让它实现OnSharedPreferenceChangeListener或者应该在另一个类中定义这个功能 - 比如在内部类中?是否有人会更倾向于采用另一种方法?
还应该在哪里注册听众?我的意思是文档和常识分别要求注册/取消注册,onResume/onPause但我看到了 很多 注册,onCreate我只是想知道我是否遗漏了一些东西.
此外,我不确定是否取消注册失败(因此这里例如取消注册可能不会被调用,因为onStop不能保证被调用)必然会导致泄漏.所以,如果我有
class MyPref extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
SharedPreferences sharedPreferences;
// init sharedPreferences
onStart(){
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
// no unregistration
}
Run Code Online (Sandbox Code Playgroud)
MyPref一旦我回到我的其他活动,这会泄漏实例吗?
最后 - 同样的考虑适用于OnPreferenceChangeListener?
编辑:回到那个我看不到实际注销的方法OnPreferenceChangeListener- 我是盲目吗?
我不认为除了个人喜好之外,还有什么重要原因可以让听众偏爱某个特定位置。实现Activity它,或者使用内部类——无论是匿名的还是非匿名的——都可以。
唯一的问题是,如果您不使用像您这样的现有对象Activity作为侦听器,则需要保留对侦听器对象的引用。根据这个答案,如果您不这样做,它将被垃圾收集(因此实际上不会听到任何内容)。
深入研究了源代码,似乎SharedPreferencesImpl使用 aWeakHashMap来包含已注册的侦听器(源代码,第 72-73 行、第 186-196 行),这意味着取消注册失败不会导致泄漏。
正如你所说,文档确实建议使用onResume()/ onPause(); 这可能与泄漏无关,而是为了防止后台应用程序进行不必要的处理 - 所以仍然值得关注!
| 归档时间: |
|
| 查看次数: |
1177 次 |
| 最近记录: |