2

ただのランダムな質問です。私は現在 Android について少し学んでいますが、ほとんどの例では、多くの一般的な項目 (ボタン、編集ボックスなど) が(cast) findViewById().

その結果をアクティビティのメンバー値に保存することは、良い習慣ですか、悪い習慣ですか? 簡単な例:

public class MyActivity extends Activity {
    private EditText myText;
    public void onCreate(blah blah) {
       // blah
       this.myText = (EditText) findViewById(R.id.mytext);
    }
}

そこから myText フィールドを使用します。パフォーマンスには良いと思いますが (findViewById の内部動作によっては、既に非常に高速になっていると確信しています)、まだ推奨されていません。また、このような「キャッシング」が問題を引き起こす状況に遭遇したのはこれが初めてではありません (データベース接続が適切に解放されない場合がありましたConnectionManager

第二に、アクティビティのメソッド全体で何かを覚えておきたい場合 (そして後でアクティビティが後で再起動されたとき) は、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 に答える