内部クラスを使用するとアプリが大きくなる(使用される内部クラスごとに数KB)という本を読んだのですが、パフォーマンスについて何か懸念はありますか?Google のサンプル コードで内部クラスが使用されているのを見ましたが、一般的に、Android では内部クラスを使用することをお勧めしますか?
ありがとう!
内部クラスを使用するとアプリが大きくなる(使用される内部クラスごとに数KB)という本を読んだのですが、パフォーマンスについて何か懸念はありますか?Google のサンプル コードで内部クラスが使用されているのを見ましたが、一般的に、Android では内部クラスを使用することをお勧めしますか?
ありがとう!
1.内部クラスは、インターフェイス メソッドを同じクラスで複数回、複数の方法で実装する場合に優れています。
2.匿名クラスは、イベント ハンドラーを作成する最良の方法です。
3. トップ レベル クラス (つまり、静的な内部クラス) を使用すると、外部クラスへの暗黙的な参照を持たない外部クラスと同様に、軽くなります。
4. 非静的内部クラスは、外部クラスへの暗黙的な参照を保持するため、多少のオーバーヘッドになります。
例: 暗黙の参照を持つ内部クラスの場合
例えば:
public class outer{
int x = 10;
class inner{
int x=5;
public void go(){
System.out.println("Inner x: "+ this.x); // Prints x in Inner class
System.out.println("Inner x: "+ Outer.this.x); // Prints x in Outer class
}
}
}
内部クラス、匿名クラス、および通常のクラスの間でコード サイズに大きな違いがあってはなりません。内部と通常の違いについては、jar を解凍して、それぞれに対して通常の .class ファイルが生成されていることを確認できます。
したがって、不要なものに夢中になることはありませんが、「絶対に避ける」シナリオでもありません.
静的内部クラスを使用する限り、問題ありません。静的内部クラスは、クラスを便利に配置し、それらを適切にスコープするためのものです。
非静的内部クラスは、それらを保持するクラスへの参照を保持するため、これは当てはまりません。これは重いだけでなく、保持クラスがライブのクラス、つまり Context がアタッチされている Android でも危険です。これにより、メモリ リークが発生し、アプリケーション全体がリークする可能性があります。
これは非常によく似た質問 (アクティビティのアダプターの内部クラスのユーザーに関するもの) と答えです: アダプターをアクティビティ の内部クラスまたは外部として保持するより良い方法は何ですか?