2011-01-04 10 views
0

スレッドまたはそのコンテキストが漏洩している可能性があるアプリケーションがあります。私が考えているのは、アプリケーションを終了した後でも、プロセスがまだ実行中であることです(可視プロセス監視アプリケーション)。 onCreateからfinish()を呼び出すまで、コード内のすべてをカットしました。プロセスはまだ周りにあり、私を悩ます。アプリケーションアプリケーションが閉じられた後でもまだプロセスが完了しています

私は

hereから)空のプロセスは、アクティブなアプリケーションコンポーネントを保持していないものであることを読みました。このようなプロセスを回避する唯一の理由は、コンポーネントを次回起動するときに起動時間を改善するためのキャッシュとしてのことです。プロセスキャッシュと基本のカーネルキャッシュとの間の全体的なシステムリソースのバランスをとるために、システムはしばしばこれらのプロセスを強制終了します。

循環参照やコンテキストリークなどの理由でプロセスがまだ周囲にあるかどうか、またはプロセスが空であるかどうかを知る方法を教えてください。

答えて

0

このプロセスがまだ表示されても、アプリケーション内のオブジェクトへの参照の有無に関する情報は得られません。あなたのためにそれに答える魔法はありません。

心配している場合は、コールバック(AKAリスナー)にシステムサービスを登録している場所(どこか)を調べる必要があります。これは共通の根本原因です。正しいパターンはonResume()に登録し、onPause()で登録解除することです。あなたのアプリが一時停止/再開したときに呼び出されることが保証されています。

本当に特別な理由がない限り、上記のように、手動でプロセスを強制終了するさまざまな方法を使用しないでください。 OSにはメモリ管理が組み込まれています。 OSよりもスマートにしようとしないでください。アンドロイドは、「終了」してもアプリケーションの成果物(アクティビティ、サービスなど)をメモリに保持します。これにより、次回より速く再起動することができます。それ以外のメモリが必要な場合は、メモリから未使用のプロセスを削除します。

0

どのようにアプリケーションを終了しますか?戻るボタンまたはホームボタンを押すだけでアプリケーションが終了することはなく、アクティビティを終了(または一時停止)するだけです。 Androidがプロセスを終了してアプリケーションを終了することを決定したときは、あなたは絶対に制御できません。

+0

私はfinish()を呼び出してアプリケーションを閉じます。いいえ、私はそれを取得し始めています...コントロールはありません... – ADB

+0

Finish()はアクティビティを閉じます。アプリケーションやプロセスとは関係ありません。 – Falmarri

+0

私は、スタックの一番下のアクティビティ(上に何もない)でfinish()を呼び出すとアプリケーションが終了すると思っていました。それがアプリケーションを閉じる適切な方法ではない場合、どうすればよいですか? – ADB

0

finish()は実際にアプリケーションを終了させません。ほとんどの場合、ユーザーが戻るボタンを押した場合とまったく同じです。

ActivityManager.killBackgroundProcesses(yourPackageName)あなたが探しているものかもしれません。

+0

それはあなたがプロセスを殺す方法ですが、これをしないでください。プロセス/アクティビティのライフサイクルを正しく管理して、アプリケーションにフォーカスがないときにリソースを使い切らないようにする必要があります。 – Falmarri

関連する問題