2

ユーザーログイン画面があります。ユーザーがログインボタンを押すと、IntentServiceを作成して、残りのサービスに接続し、認証結果を返します。

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

この機能または他の何か(サービスや非同期タスクなど)にインテントサービスを使用する必要がありますか?

4

2 に答える 2

0

onDestroy()あなたの方法でそれを止めなさい

于 2012-02-29T16:29:17.940 に答える
0

まず、アプリがフォアグラウンドで実行されているときにサービスが実行したいことを実行している場合、サービスは必要ありません。アクティビティまたはダイアログは、タスクを実行するためのスレッドを生成するだけで済みます。これらのスレッドは、アプリのタスクスコープ内にあるため、アプリが終了すると終了します。それ以外の場合、ユーザーがデバイス上で何かを実行できるときに、常に実行したいタスクについては、必ずサービスを使用してください。

なぜ「リターンを呼び出す」があなたの選択肢ではないのかわかりませんか?これは、条件をチェックし、条件が満たされた場合にループまたはブロックを終了することを意味すると想定します。これは通常、(サービス内または他の場所での)スレッドを終了する方法です(他のアプローチもありますが)。サービスのスレッドは、発生した特定のイベントをリッスンできます(アクティビティが破棄された場合など、アクティビティonDestroyが呼び出されたときにファイルまたはデータベースにプロパティを設定することで、これが必要な場合は、おそらく使用しないでください。サービス)、そしてrun()優雅に戻ることができます。

ただし、これがユーザーがデバイス上で(アプリの内外で)何をしているかに関係なく実行したいタスクである場合は、外部から中断されてはならないタスクである必要があります。それが完了するまで、それは続くはずです。

このサービスをいつ停止するかをより適切に定義できるとしたらどうでしょうか。

于 2012-02-29T16:32:57.740 に答える