只是一个随机问题。我现在正在学习一些 Android,在大多数示例中,似乎在每个函数中使用 (cast) findViewById()
请求了很多常见项目(例如按钮、编辑框等) .
将结果存储在 Activity 的成员值中是好是坏?简单示例:
public class MyActivity extends Activity {
private EditText myText;
public void onCreate(blah blah) {
// blah
this.myText = (EditText) findViewById(R.id.mytext);
}
}
并从那里开始使用 myText 字段。我认为这对性能有好处(取决于 findViewById 的内部工作原理,我很确定它已经非常快),但我还没有看到它受到鼓励。此外,这不是我第一次遇到这样的“缓存”导致问题的情况(有一个数据库连接未正确释放的情况,因为我记得 ConnectionManager
或其他东西以那种方式)。
其次,有点相关,如果你想记住 Activity 中跨方法的一些东西(以及稍后,当 Activity 稍后重新启动时),在 SharedPreferences 中同时保留类字段和值是否更明智,或者每次调用 SharedPreferences 来设置/获取需要的值会是更好的解决方案吗? (最好是“更干净,不会显着影响性能”)
最佳答案
这是完全正常的做法,也正是您应该做的。如果您担心内存泄漏、持有引用或其他任何问题,在处理 View 时不要担心这些。
但是,您应该小心持有对其他上下文的引用,因为这可能会导致内存泄漏。这并不意味着你不应该这样做,只是在你这样做的时候要小心。
在 SharedPreferences 中同时保留一个类字段和一个值是否更明智,或者每次调用 SharedPreferences 以在需要的地方设置/获取值是更好的解决方案?
你应该两者都做。当你只需要读取数据时,你应该保留一个成员变量,只要确保当你写入成员变量时,你也改变了共享偏好。
另外,这不是我第一次遇到像这样的“缓存”会导致问题的情况(有一个数据库连接没有正确释放的情况,因为我记得 ConnectionManager 或其他东西那种时尚)。
这就是我首先要说的。这完全取决于您存储的内容。 View 可以很好地存储,上下文可能很危险,数据库连接和注册的监听器可能会导致非常奇怪的错误。这一切都取决于具体情况。
关于android - 在 Activity 中使用 SharedPreferences 和/或类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3824763/