3

匿名リスナーを使用するのが良い方法かどうか疑問に思っていましたか?

たとえば、50 項目のリストがあります。それらのそれぞれには、onClickListener匿名リスナーを使用して実装された があります。これは、ヒープに 50 個の新しいアイテムを作成するということですか?

for (x;x;x) {
   item.setOnClickListener(new OnClikListener() {
      ...
    });
}

そして、リスナー オブジェクトを 1 つだけ作成し、その 50 個のリスト アイテムをその 1 つのリスナーに割り当てるとします。より効率的になりますか?

OnClickListener listener = new OnClickListener() {
   ...
};

for (x;x;x) {
   item.setOnClickListener(listener);
}
4

3 に答える 3

3

匿名であることは関係ありません。作成したすべてのオブジェクト インスタンスはヒープに置かれます。多くのボタンで同じリスナーを再利用できる場合は、必ず再利用してください。必要なメモリが少なくなり、ガベージの生成が少なくなります。

于 2012-09-17T11:50:48.993 に答える
2

はい、単純なルールがあります。実行するたびにnew、新しいオブジェクトが作成されます。インスタンス化するクラスが無名クラスであることは問題ではありません。

作成されたオブジェクトがすべて同じである場合 (つまり、変化する変数を閉じていない場合)、それらを単一の共有インスタンスに置き換えることをお勧めします。

于 2012-09-17T11:49:17.890 に答える
0

1) はい、時間がかかります。実際、リスナーをオブジェクトとして作成するだけでなく、クラスとして作成します (ただし、それらは既にコンパイルされています)。

2) はい、より効率的になります。とはいえ、リスナーが多くのリソースを必要としない限り、パフォーマンスはあまり向上しません。コードを複雑にする価値があるかどうかを判断します。

于 2012-09-17T11:50:15.670 に答える