只是一个随机的问题。我现在正在学习一些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每次在需要的地方设置/获取值是一个更好的解决方案? (更好的是“更清洁,而不会显着影响性能”)

最佳答案

那是完全正常的做法,而这正是您应该做的。如果您担心内存泄漏或持有引用之类的东西,则在处理视图时不必担心。

但是,您应该谨慎持有对其他上下文的引用,因为这可能会导致内存泄漏。这并不意味着您不应该这样做,只是要注意何时进行。

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).

这是我首先说的。这完全取决于您要存储的内容。视图很容易存储,上下文可能很危险,数据库连接和注册的侦听器可能会引起真正的怪异错误。这完全取决于具体情况。

关于android - 在 Activity 中使用SharedPreferences和/或类变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3824763/

10-13 04:36