システムがメモリーのためにサービスを強制終了した後、BOOT_COMPLETE によって開始されたサービスはどうなりますか?
電話を再起動せずに再起動することはありますか? どうにかして再開することはできないでしょうか?
重要なサービスが殺されるのをできるだけ避けるためのベストプラクティスは何ですか?
システムがメモリーのためにサービスを強制終了した後、BOOT_COMPLETE によって開始されたサービスはどうなりますか?
電話を再起動せずに再起動することはありますか? どうにかして再開することはできないでしょうか?
重要なサービスが殺されるのをできるだけ避けるためのベストプラクティスは何ですか?
START_STICKYをご覧ください。
電話を再起動せずに再起動することはありますか?
おそらく。それが本当に「システムがメモリのためにそれを強制終了した」ためであり、onStartCommand()
(たとえばSTART_STICKY
) から適切な値を返す場合は、将来のある時点で再起動する必要があります。ユーザーの操作 ([設定] の [サービスの管理] 画面での強制停止など) によってサービスが強制終了された場合、サービスは再起動されません。
重要なサービスが殺されるのをできるだけ避けるためのベストプラクティスは何ですか?
まず、このような永続的なサービスに依存しないようにアプリケーションを設計します。Android アプリケーションの 99.44% は、継続的に実行されるサービスを必要としません。起動時に実行を開始するサービスは言うまでもありません。Android デバイスのユーザーは、自分のアプリが非常に重要であり、常にサービスを実行している必要があると考えている開発者を嫌います。そのため、古いためにタスク キラー、Force Stop、および Android キリング サービスが用意されています。たとえば、新しい電子メールを 15 分ごとにチェックする場合は、永続的に実行されるサービスではなく、 を使用AlarmManager
します。IntentService
私とあなたのユーザーに対して、あなたのアプリケーションが、起動時に開始され永久に実行されるサービスを本当に必要とするアプリケーションの 0.56% の中に含まれていることを実証できれば、startForeground()
. これにより、サービスがフォアグラウンド ユーザー エクスペリエンスの一部であることを OS に示します。を表示する必要がありますNotification
。理想的には、ユーザーが正当でないと感じた場合に、ユーザーがサービスを完全にシャットダウンできるようにします。
AlarmManagerを使用して、定期的にインテントを送信します。インテントを受信して、サービスが実行されていることを確認します。