Androidアプリケーションでメモリリークを見つけようとしています。私は次の状況にあります:
クラスAは、スレッドを作成するクラスA$24を作成しました。このスレッドにはクラスAへの参照があるため、これがリークです。A $ 24はクラスAで作成された匿名のクラスであることを理解していますが、コードのどの行で、どこで作成されたかを確認するにはどうすればよいですか。私の問題は、問題のあるスレッドが誰であるかを理解することです。
Androidアプリケーションでメモリリークを見つけようとしています。私は次の状況にあります:
クラスAは、スレッドを作成するクラスA$24を作成しました。このスレッドにはクラスAへの参照があるため、これがリークです。A $ 24はクラスAで作成された匿名のクラスであることを理解していますが、コードのどの行で、どこで作成されたかを確認するにはどうすればよいですか。私の問題は、問題のあるスレッドが誰であるかを理解することです。
リソースパースペクティブのプロジェクトエクスプローラーで、[表示]メニューを使用し、[ビューのカスタマイズ...]を選択して、[内部クラスファイル]と[Java出力フォルダー]のチェックを外します。これで、生成されたクラスファイルがプロジェクトエクスプローラーの「bin」フォルダーに表示されます。
A $ 24.classファイルに移動すると、ダブルクリックして開くことができます。このように、フィールドセレクターについて話している上部の行を探します
// Field descriptor #10 Z
private final synthetic boolean val$fStartMinimized
この例では、最後のフィールドfStartMinimizedがanonymousクラスによって使用されます(したがって、anonymousクラスにコピーされます)。そのフィールド名を使用すると、問題の任意のクラスを見つけることができるはずです。
そのようなフィールド宣言がない場合(そして手がかりを与えるメソッド名もない場合)、 ByteCodeアウトラインプラグインでより多くの洞察を得ることができます(しかし、私はそれを自分で使用したことはありません)。