1

今、Androidにはアプリを「終了」するようなものはないことを認識しています。これは、アプリ内のすべてのアクティビティが破棄された後でも、アプリに対応するプロセスがメモリに保持されることを意味します。(わかりやすくするために、サービスなどは含めないようにします)。プロセスは、システムがメモリを再利用するために強制終了することを決定した場合にのみ強制終了されます。

ただし、すべてのアクティビティが破棄されると、アプリに対応するプロセスは「アクティブ」ではなくなったと思います。これは、私のアプリが何の作業も行っていないため、プロセスが割り当てを実行しなくなったと想定していることを意味します。この仮定は正しいですか?

HelloWorldEclipse ADTがを介して提供する単純なデフォルトの例を使用しNew Android Project Wizardましたが、そうではないことがわかりました。アプリを閉じた後でも、DDMSで割り当てを追跡できます。誰かがこれの理由を説明できますか?

4

2 に答える 2

2

Allocation tracker にはヒントがあります: Thread Id列とAllocated in列。これらを見ると、どのオブジェクトとメソッドが割り当てを行ったかがわかります。

非アクティブなアプリで DdmServer に割り当てが表示されます。これは、メモリが DDMS サービスの動作に使用されていることを示しています。

他の種類の割り当てが発生した場合は、アプリに未処理のスレッドがあるかどうか、またはバックグラウンドでまだ実行されている可能性のある他のタスクがないかどうかを確認してください。この場合は、Activity.onDestroy で必ずクリーンアップを行ってください。

于 2012-03-28T11:31:59.873 に答える
1

DDMS が接続されているため、プロセス内で実行されているコードがあります。そのコードは、リモート デバッグ機能の「リモート」部分です。そこではコードが実行されているため、そのコードによってメモリが割り当てられ、それらの割り当てが表示されます。

デバッガーがプロセスにアタッチされていない場合、OS は必要に応じてプロセスを破棄する可能性があります。ただし、デバッガーが付属しているため、見ている間にプロセスが消えることはありません。

これはオブザーバー効果の例です。見ているだけで予期しない結果が得られます ;-)

于 2012-03-28T11:55:53.907 に答える