2011-09-11 6 views
0

バックグラウンドで120秒間アイドル状態のまま放置すると、自己終了したいアプリがあります。たとえば、私のアプリが使用されているとし、私はHOMEキーをタップしてブラウザアイコンをタップすると、ブラウザアプリがフォアグラウンドにある間、私のアプリはバックグラウンドにプッシュされます。私はRunnableをタイマーは120秒後にコールすることを予定している: バックグラウンドにあるアプリを正常に閉じるにはどうすればよいですか?

Intent intent; 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
myActivity.startActivity(intent); 

たグローバルフラグがそうするように設定されている場合(つまり、アプリを閉じ、私は仕上げを呼び出すのonCreate()メソッド()のための私のmyActivityクラスの内部)。

これはうまくいきます。これは、ブラウザアプリがバックグラウンドに送信され、自分のホーム画面のページが表示される、バックグラウンドアプリが閉じられている間にブラウザアプリを使用している場合を除いて、正常に機能します。これは、私のアプリが閉鎖される前に数秒間フォアグラウンドにポップして、ブラウザアプリがバックグラウンドにプッシュされるためだと推測します。

私の仕事(例えば、System.exit(0))を殺す他の方法がありますが、そのメソッドを使用しようとすると、後で私のアプリケーションを再実行しようとすると「強制終了」エラーメッセージが表示されます。また、System.exit()メソッドの使用は、finish()の呼び出しと同じように、アプリケーションをクリーンアップしないので、お勧めしません。

フォアグラウンドランニングアプリに影響を与えずに、バックグラウンドで自分のアプリを正常に閉じることができますか?

ありがとうございました。

+0

なぜあなたはそれをしますか? Androidはメモリ管理とクリーンアップを単独で処理し、素晴らしい仕事をしています。アクティビティライフサイクルの適切なメソッドの中にある、 'onPause()'、 'onStop()'、 'onDestroy()'のリソースを解放してください。 –

+1

アプリには画面に表示される安全なデータが含まれているため、これを行う必要があります。ユーザーがブラウザ(または他のアプリ)に切り替えると、一定時間後に戻るボタンを押すだけで、安全なデータが利用できなくなることを確認したいと思います。 – cohoman

答えて

2

onResume()メソッドは、タイマーの有効期限が切れている場合にチェックインできます。はいの場合、データをemtpyに簡単に設定して電話をかけます。finish()

0

プロセスはバックグラウンドで動作し続けますが、どのような方法でも「停止」または「中断」されません(UIのみが非アクティブになっているはずです)。したがって、適切な間隔の後にあなたの活動に仕上げを呼び出すタイマーなどを掲示することができます。

+0

私は実行可能なタイマーを持っているので、特定の量の非活動時に一連のステートメントを実行します。私が知る必要があることは、現在、自分のタスクアクティビティスタックでどのアクティビティが最も多くアクティブであり、どのようにその特定のアクティビティに対してfinish()メソッドを呼び出すことができるかです。 – cohoman

0

FLAG_ACTIVITY_CLEAR_TOPをasインテントフラグとして呼び出すことができ、そのインテントから開始されたアクティビティ以外のすべてが破棄され、その上でfinish()を呼び出して100%終了することができます。