在Activity中使用SharedPreferences和/或类变量

时间:2010-09-29 18:35:17

标签: android sharedpreferences

只是一个随机的问题。我现在正在学习一些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,稍后重新启动Activity),是否更明智地保持SharedPreferences中的类字段和值,或者每次调用SharedPreferences来设置/获取需要更好的解决方案的值? (更好地'更清洁,不会显着影响性能)

1 个答案:

答案 0 :(得分:2)

这是完全正常的做法,正是你应该做的。如果你担心内存泄漏,或持有引用或其他什么,在处理视图时不要担心。

但是,您应该小心保持对其他上下文的引用,因为可能会导致内存泄漏。这并不意味着你不应该这样做,只要在你做这件事时要小心。

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

这就是我先说的。这一切都取决于你的存储。视图可以存储,上下文可能很危险,数据库连接和注册的侦听器可能会导致非常奇怪的错误。这一切都取决于具体情况。