START_STICKYを使用することにより、タスクマネージャーによってサービスがクラッシュ/強制終了された場合、サービスは自動的に再起動します。再起動されるサービスのリストがありますが、順序が異なります。このサービスの再起動を優先して、キューの先頭に配置することでサービスがより早く開始されるようにします。
通常、サービスの再開には15秒から45秒かかります。このサービスを他のサービスよりも早く優先または開始する方法はありますか?
START_STICKYを使用することにより、タスクマネージャーによってサービスがクラッシュ/強制終了された場合、サービスは自動的に再起動します。再起動されるサービスのリストがありますが、順序が異なります。このサービスの再起動を優先して、キューの先頭に配置することでサービスがより早く開始されるようにします。
通常、サービスの再開には15秒から45秒かかります。このサービスを他のサービスよりも早く優先または開始する方法はありますか?
このソリューションは少し汚いと思いますが、で始まる新しいサービスを使用して、START_STICKY
他のすべてのサービスをに設定することができますSTART_NOT_STICKY
。
その後、新しいサービスを使用して他のすべてのサービスを開始できます(ただし、これは必ずしも必要ではありません)。開始するサービスにインテント全体を渡すことができるため、これは実際には簡単な実装です。
次に、すべてのサービスにブロードキャストを追加してOnDestroy()
、古いサービスの1つがシステムによって強制終了されたことを新しいサービスに通知できます。を介して古い開始インテントを渡すこともできるOnDestroy()
ため、再起動されます。
新しいサービスが強制終了された場合は、再起動後に他のサービスも強制終了されていないかどうかを確認し、再起動を優先することができます。
あなたのサービスは長期にわたって実行されていますか?そうである場合は、それを取り除き、必要なときにのみ開始してください。Androidサービスは、デーモンとして実行することを意図したものではなく、ユーザーの操作やインターフェースが必要ない場合に、バックグラウンドで短命のワーカーとして実行することを目的としています。
「私はただ座っている」サービスのほとんどは、放送の意図を聞くことができ、このようにして素敵な市民になることができます。
もう1つのこと:サービスがすでに不足していて、タスクキラーがアクティブである場合、それは簡単です。それはユーザーの問題であり、あなたのせいではありません。システムはタスクキラーを必要とせず、あなたはそれらの世話をするべきではありません。ユーザーはそれらを使用することは健康的ではないことを知っている必要があります。