3

私は Android を初めて使用しますが、メモリが限られているアプリではメモリ管理が非常に重要であることを読んでいます。

findViewById()その活動が非常に高価な場所を読んだことがあります。ですから、使用するビューをグローバル変数として保存し、オブジェクトを再利用することをお勧めしますか? またはfindViewById()、ビューを使用する必要があるたびに実行する方が良いですか?

ありがとう、ケブ

4

4 に答える 4

5

あなたが意味するのがstatic variableである場合global variable決してそれをしないでください! ビューを静的変数として保持すると、ビューを保持するアクティビティがリークします。

画面に表示されるすべてのビューは特定のアクティビティに関連付けられており、それらはアクティビティへの参照を保持します。ビューの 1 つへの静的参照を保持すると、アクティビティが強制終了されたときにアクティビティがガベージ コレクションされることはありません(戻るキーを押すかfinish()、アクティビティでメソッドを呼び出します)。

についてfindViewById()は、パフォーマンスをあまり気にする必要はないと思います。オーバーヘッドが発生する可能性がありますが、比較的高価であり、ほとんどのアプリで十分な速度です。

于 2013-05-24T03:47:50.900 に答える
5

「ビューをグローバル変数として保存する」とは、「ビューへの参照をアクティビティ クラスのプライベート プロパティとして保持する」という意味だと思います。メモリに関する限り、これは問題になりません。ビューへの追加の参照を保持することは、オブジェクト全体をメモリに再度格納することを意味しません。

オブジェクトへの参照を保持している場合、ガベージ コレクターは、そのオブジェクトが不要になったとしても、メモリからそのオブジェクトを削除できないことに注意してください。しかし、アクティビティが破棄される前にビューが破棄されることはおそらくないため、Activity クラスでビューへの参照を保持しても、メモリ リークが発生することはありません。

要するに、Activity クラスでビューに頻繁にアクセスする必要がある場合、それは良い習慣だと思います。少なくともこれは私が行っていることなので、同意しない人がいれば、その理由を知りたいと思います。

于 2013-05-24T03:50:03.877 に答える
1

はい、ビューをアクティビティのメンバー変数として作成することをお勧めします (Java にはグローバル変数はなく、クラスで宣言された変数はメンバー変数と呼ばれます)。

public MyActivity extends Activity{
    private View mView;

    public void onCreate(Bundle savedState){
        super.onCreate(savedState);
        setContentView(layout);
        mView = findViewById(id);
    }
}
于 2013-05-24T03:52:04.353 に答える
0

クラスのプライベート メンバーとして格納することは、複数回使用するものに一般的です。そのようなオブジェクトへのポインター。小さいです。

于 2013-05-24T03:47:06.350 に答える