在活动使用SharedPreferences和/或类变量
-
26-09-2019 - |
题
只是一个随机质询。我学习了一下Android系统,现在,在大多数例子中,这似乎是一个很多普通物品(如按钮,editboxes等)获得所需的各功能使用(cast) findViewById()
内。
时,它认为好或不好的做法,存储在一个活动的成员值的结果呢?简单的例子:
public class MyActivity extends Activity {
private EditText myText;
public void onCreate(blah blah) {
// blah
this.myText = (EditText) findViewById(R.id.mytext);
}
}
和使用会将myText字段从那里。我觉得这是很好的性能(取决于findViewById的内部运作,我确信它已经是非常快的),但我还没有看到它尚未被鼓励。此外,它不会是我第一次遇到的情况是“缓存”这样的事情导致的问题(有地方,因为我记得在时尚ConnectionManager
什么的数据库连接不正确释放的情况下)。
其次,有些相关的,如果你要记住你的活动在方法之间的东西(以及后来也当活动以后重新启动),是更明智跟上两个一类领域,在SharedPreferences值,或者将调用SharedPreferences用于设置/获取在那里的需要是一个更好的解决方案的价值每一次? (更好为“清洁器,没有显著影响性能)
解决方案
这完全是正常的做法,正是你应该做的事情。如果你担心内存泄漏,或持有引用或什么的,不被关注与意见的时候。
然而,你应该小心抱着其他情况下引用,因为这可能会导致内存泄漏。这并不意味着你不应该这样做,只是要小心,当你这样做。
is it wiser to keep up both a class field and a value in SharedPreferences, or would calling SharedPreferences each time for setting / getting the value where it's needing be a better solution?
您应该两者都做。你应该保持一个成员变量时,你只需要读取数据,只是可以肯定,当你写的成员变量,你也更改共享偏好。
Also, it wouldn't be the first time I encountered a situation where 'caching' something like this leads to problems (had a case where database connections weren't released properly because I remembered a ConnectionManager or something in that fashion).
这是我第一次说。这一切都取决于你要存储什么。视图是细到店,上下文可能是危险的,并且数据库连接和注册听众可能会导致真正的莫名其妙的错误。这一切都依赖于特定情况。