0

Androidアプリケーションでメモリリークを見つけようとしています。私は次の状況にあります:

クラスAは、スレッドを作成するクラスA$24を作成しました。このスレッドにはクラスAへの参照があるため、これがリークです。A $ 24はクラスAで作成された匿名のクラスであることを理解していますが、コードのどの行で、どこで作成されたかを確認するにはどうすればよいですか。私の問題は、問題のあるスレッドが誰であるかを理解することです。

4

1 に答える 1

1

リソースパースペクティブプロジェクトエクスプローラーで、[表示]メニューを使用し、[ビューのカスタマイズ...]を選択して、[内部クラスファイル]と[Java出力フォルダー]のチェックを外します。これで、生成されたクラスファイルがプロジェクトエクスプローラーの「bin」フォルダーに表示されます。

A $ 24.classファイルに移動すると、ダブルクリックして開くことができます。このように、フィールドセレクターについて話している上部の行を探します

 // Field descriptor #10 Z
  private final synthetic boolean val$fStartMinimized

この例では、最後のフィールドfStartMinimizedがanonymousクラスによって使用されます(したがって、anonymousクラスにコピーされます)。そのフィールド名を使用すると、問題の任意のクラスを見つけることができるはずです。

そのようなフィールド宣言がない場合(そして手がかりを与えるメソッド名もない場合)、 ByteCodeアウトラインプラグインでより多くの洞察を得ることができます(しかし、私はそれを自分で使用したことはありません)。

于 2012-07-17T20:41:44.770 に答える