2011-07-15 10 views
4

私のアプリケーションは3つのアクティビティを起動します。 終了したいときは、finishメソッドを呼び出す3つのアクティビティを閉じます。アクティビティonDestroyメソッドが呼び出されますが、プロセスはまだ生きています... どうすれば可能ですか?アクティビティの終了後にアンドロイドプロセスがまだ生きています

+1

あなたのonDestroy()コールバックのすべてをクリーンアップしたことを確認しましたか?コンテンツプロバイダーなどの登録を解除し、すべての接続を閉じることを確認してください。 – robamaton

+0

あなたのアクティビティにはサービスが含まれています – Rasel

答えて

7

これは完全に正常です。 Androidは、そのプロセスのメモリを再利用する必要があるときまで、プロセスを維持します。そうすれば、ユーザーがすぐにアプリケーションに戻ると、アプリケーションがより速く表示されます。Androidはプロセスをフォークしてアプリケーションをメモリにロードする必要はありません。

+0

問題は多くの静的変数があることです!ユーザーが自分のアプリケーションに戻ると、ユーザーは未定義の状態になります。 – Arutha

+0

ユーザー出口アプリケーションを適切に使用してプロセスを強制終了する必要があります。 – Arutha

+1

@Arutha:いいえ、そうではありません。より良いコーディングをする必要があります。静的データメンバーが存在するかどうかは、いつでも保証されません。これは、あなたがあなたのアプリケーションを放棄し、Androidがあなたの活動を取り除く(例えば、ユーザがHOMEを押して帰ってこないなどの)多くのシナリオがあるので、あなたが 'finish()'を呼び出すかどうかとは何の関係もありません)。静的データメンバーを使用する場合は、インスタンスが存在するかどうか、または存在しないかどうかをケースで処理する必要があります。それができない場合は、静的データメンバーを使用しないでください。 – CommonsWare

-1

試してみてください。

System.exit(0); 

それはあなたの活動プロセスを強制終了します。

編集: 以下のコメントに記載されています。これははるかに良く機能します: android.os.Process.killProcess(android.os.Process.myPid());

+0

私たちのアプリでSystem.exit(0)を使用することを避ける理由はたくさんありますが... "android.os.Process.killProcess(android.os.Process.myPid());"もっとうまくいく... –

+0

それを知らなかった。ありがとう! – Azertiy

+0

なぜよりうまくいくのですか?私はSystem.exitとkillProcessの違いに気付きませんでした。 –