2012-02-29 11 views
2

私はユーザーのログイン画面を持っています。ユーザーはログインボタンを押してIntentServiceを作成し、残りのサービスに接続して認証結果を返します。インテントサービスを使用する必要がありますか?

ここで達成したい機能は次のとおりです。アクティビティが一時停止(つまりバックグラウンド)している場合、インテントサービスはまだ実行されていなければなりません。しかし、私がタスクマネージャを使用してアプリケーションを終了させると、インテントサービスは停止するはずですが、現在はそうしていません。完了するまでonHandleIntentを実行し続けます。手動でstopSelf()を呼び出すと、onDestroy()が呼び出されますが、onHandleIntentメソッドは引き続き実行されます。 onHandleIntentを強制的に停止させるにはどうすればよいですか? "return"を呼び出すことは、1つのrestメソッド呼び出しに巻き込まれる可能性があるため、オプションではありません。

この機能やサービス(asynctaskなど)にインテントサービスを使用する必要がありますか?あなたのサービスは、あなたのアプリがフォアグラウンドで実行されている間、あなたがサービスを必要としないで行わたいものをやっている場合

答えて

0

まずオフでそれを止めます。あなたのアクティビティやダイアログはスレッドを生成してタスクを実行するだけで、アプリケーションのタスクスコープ内にあるため、これらのスレッドはアプリケーションの終了時に終了します。さもなければ、ユーザーがいつでもデバイス上で何かをすることができるときに、あなたはいつもやりたい仕事のために、間違いなくサービスを使います。

"コールリターン"がオプションでない理由はわかりません。これにより、条件をチェックし、条件が満たされた場合にループまたはブロックを終了することを意味します。これは一般的にスレッド(サービス内または他の場所)がどのように終了するかです(他にもapproachesがあります)。サービスのスレッドは、アクティビティが破棄された場合、アクティビティのonDestroyが呼び出されたときにファイルまたはデータベースにプロパティを設定することによって発生した特定のイベントを聴くことができます。サービス)、その後run()は正常に戻ることができます。

これは、ユーザーが自分のデバイスで行っていること(アプリの内部または外部)に関係なく実行したいタスクであれば、外部から中断してはいけないタスクである必要があります。それは完了するまで続けるべきです。

このサービスをいつ停止するかを明確に定義できますか?

+0

IntentServiceを呼び出すアクティビティが破棄された場合にのみIntentServiceを停止します。 IntentServiceは、それを作成したアクティビティが一時停止している場合(現在実行中)、引き続き実行する必要があります。アクティビティが破棄されたときにサービスのstopSelf()を呼び出すと、サービスのonDestroyメソッドが呼び出されますが、onHandleIntentは引き続き実行され、停止することはありません。 – MobileMon

+1

アクティビティが破棄された場合にタスクを停止したい場合は、サービスを使用しません。私はあなたのonHandleIntentメソッドでコードを実行するスレッドを使用します。スレッドを手動で削除することもできますし、あなたのアクティビティのonDestroyコールに設定されている条件をリッスンすることもできます。通常、私はonCreateでtrueに設定したisLiveという静的なブール値を持ち、onDestroyではfalseを返します。通常はこの目的のために機能します。 – ubzack

+0

甘いおかげで、まさに私が探していた答えです! – MobileMon

0

は、あなたのonDestroy()方法

+0

どのようにですか? onDestroy()が呼び出されますが、onDandroy()からonHandleIntent()メソッドを停止するにはどうすればよいですか? – MobileMon

関連する問題