【问题标题】:Using SharedPreferences and/or class variables in an Activity在 Activity 中使用 SharedPreferences 和/或类变量
【发布时间】:2010-09-29 18:35:16
【问题描述】:

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

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 对我来说很有意义,谢谢!也不包含对其他上下文和视图的引用,正如我所读到的,一旦它们不再可见,它们可能会被回收。我接受了你的回答,非常感谢:)。
    猜你喜欢
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多