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

标签 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 稍后重新启动时),在 SharedPreferences 中同时保留类字段和值是否更明智,或者每次调用 SharedPreferences 来设置/获取需要的值会是更好的解决方案吗? (最好是“更干净,不会显着影响性能”)

最佳答案

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

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

在 SharedPreferences 中同时保留一个类字段和一个值是否更明智,或者每次调用 SharedPreferences 以在需要的地方设置/获取值是更好的解决方案?

你应该两者都做。当你只需要读取数据时,你应该保留一个成员变量,只要确保当你写入成员变量时,你也改变了共享偏好。

另外,这不是我第一次遇到像这样的“缓存”会导致问题的情况(有一个数据库连接没有正确释放的情况,因为我记得 ConnectionManager 或其他东西那种时尚)。

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

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

相关文章:

Android - 在 AsyncTask onPostExecute() 中设置的共享首选项并不总是设置?

java - 使用 Serializable 将数据从 RecyclerView 传递到 RecyclerViewMore - AndroidX

java - 如何在我的主类中使用 Fragment 的 Spinner 事件?

android - 共享首选项不起作用,android?

java - 将登录状态存储在 sqlite 中或共享首选项

android - 从后台打开应用程序后如何检索上一个 fragment ? (未杀死的应用)

Android AudioRecord 哪些设置来记录通话

android - 从 Activity 中设置 fragment 的参数

android - 搞乱 android 的共享首选项 - 使用哪个功能?

android - SharedPreferences getLong() -> java.lang.String 无法转换为 java.lang.Long。怎么修?