バックグラウンド サービスを無期限に実行できますか? 無期限に実行すると、アンドロイドは私のサービスを殺しますか? Facebook Androidアプリケーションがバックグラウンドで長時間実行され続ける方法?? それについて知るのを手伝ってください。
3 に答える
そのために、次の機能を使用できます。
1) 再起動後にサービスを自動再起動 (再起動後にインテントを開始)
2) スティッキー サービス モード ( http://developer.android.com/reference/android/app/Service.html#START_STICKY )
これらの機能はどちらも、サービスを可能な限り常に開始したままにするのに役立ちます。
メモリが不足すると、Android はサービスを強制終了しますが、いくつかの方法で復旧できます。
最初に試すことができるのは、フォアグラウンド サービスを使用することです。フォアグラウンド サービスは、完全に必要でない限り強制終了されない優先度の高いサービスです (これらのサービスはバッテリー消費を増加させることに注意してください)。古いデバイスとの互換性を使用した例をここで見つけることができます。それ以外の場合は、サービス内で startForeground を呼び出すだけで済みます。
他にできることは、OS によって強制終了されたときにサービスを再起動するために、サービスでいくつかのフラグを使用することです。2 つの異なるフラグを使用できます (再現する動作に応じて)。
START_STICKY は空のインテントでサービスを再起動するため、サービスを実行するために必要なデータを回復する必要があるたびに.
START_REDELIVER_INTENT この場合、サービスは最後のインテント情報で再起動されます (異なる動作が必要な場合は、異なる情報でサービスを複数回実行する可能性があります)。
フラグは次のように使用できます。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//Do your service work
return START_STICKY; //or return START_REDELIVER_INTENT;
}
必要なものに応じて、いずれかを使用します。
それが役に立てば幸い :)
サービスが強制終了されないように完全に保護する方法はありません。
START_STICKY
から戻ったonStartCommand()
場合、Service が強制終了された場合でも、Android は、リソースが空いているときにサービスを再起動するために最善を尽くします。