web-dev-qa-db-ja.com

アプリが閉じているときでもIntentServiceを実行し続ける方法は?

私のAndroidアプリでは、呼び出しによってアクティビティ内からIntentServiceを開始します

startService(new Intent(this, MyService.class));

そしてそれは魅力のように働きます。アクティビティ間を移動し、ホームボタンを押して他のアプリに切り替えることができます。それでも機能します。しかし、最近の画面からアプリを削除すると、サービスが停止します。どうすればこれを回避できますか?つまり、アプリが最近のアプリから閉じられている場合でも、サービスを継続して実行するにはどうすればよいですか?

私のサービスコードは次のとおりです。

public class MyService extends IntentService {

public MyService() {
    super("MyService");
}

@Override
protected void onHandleIntent(Intent intent) {
    //Here I run a loop which takes some time to finish
}

}
19
fergaral

IntentService は常に実行されているわけではありませんが、Intentベースで動作します。あなたは送信し、Intentを使用して実行する(何らかのジョブを実行する)コマンドを言ってみましょう。サービスはそのジョブを実行し、その後他のIntentを待機してから停止します。
目標を達成するには、IntentServiceの代わりに通常の Service を使用する必要があります。サービスはSTART_STICKYとして構成する必要があります。

12
Stan

サービスクラス@OverrideonStartCommand メソッド

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

サービス自体を強制終了するには、 stopSelf() を使用できます

5
Sai Phani