2011-02-18 9 views
1

私のアプリケーションは、メインアクティビティ - >アクティビティ1 - >アクティビティ2であり、いくつかのダウンロード作業を行っている別のワーカースレッドがあります。そして、彼らは同じプロセスの中で始まります。アプリケーションのライフサイクル:プロセスが終了したときにクリーンなジョブを実行するにはどうすればよいですか?

すべてのアクティビティが破棄されるか、プロセスが終了するまで、ダウンロードスレッドは終了しません。 Javaでは、非常に簡単です。メインメソッドにクリーンなコードを追加することで問題ありません。しかし、私はAndroidで何が正しいのか分からない。すべてのアクティビティはシステムによってリサイクルされる可能性があるので、私はワーカースレッドのクリーンコードをどこに置くべきかわかりません。また、アプリケーション全体のエンドポイントは何か分かりません。

誰か私にいくつかのアイデアを教えてください。ありがとう。

+0

アンドロイド2.1では、Application.onTerminate()が動作していないようです。ワーカースレッド(またはサービス)の参照カウントを追加するだけの選択肢があります。参照カウントが0に減少すると、ワーカースレッドを終了します。 – loopscn

+0

私はアンドロイドアプリケーションを終了することによって私が混乱していたことがわかりました。私はワーカースレッドをサービスに変更することに決めました。これは、onDestroyメソッドにクリーンなコードを置きます。明示的にメニューコマンドを追加して、PCのGUIプログラムと同様にアプリケーション全体を終了します。それらを助けてくれてありがとう。 – loopscn

答えて

1

あなたが主なアクティビティでサービスを開始し、サービスのonDestroyメソッドですべてのクリーンアップコードを持つことができます。アプリケーションが破棄されるとサービスが破棄されます

onTerminateは、エミュレータでのみ動作します。これはドキュメントに記載されています。

+0

ありがとうございました。私がアプリケーションを閉じることを選んだ後、プロセスと一緒にサービスは私の予想以上に長い時間生き延びました。私はアンドロイドとPCの違いを理解するようになります。 – loopscn

+0

実際にアプリケーションを終了しますか?私はあなたが単にアプリケーションを閉じることはできないと信じています。それはまだ記憶に残っています。アプリケーションがバックグラウンドになったときにサービスを終了させたい場合は、現在のアクティビティのonPause/onResumeメソッドを使用することを想定する必要があります。 android docsのアクティビティライフサイクルについて読む... onPause/onResume/etcメソッドを使って抽象的なアクティビティクラスを作成し、そのクラスからあなたのすべてのアクティビティを派生させます。(これは良いアプローチであれば100% ) – Alex

+0

btw、「終了」ボタンを作ることは、私が知る限りアンドロイドの悪い練習です。 OSはユーザーではなく、そのことを考慮する必要があります – Alex

関連する問題