2

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

4

1 回答 1

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

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

于 2010-09-29T18:40:21.813 回答