docs を読んだところ、Context.startForegroundService()
には開始されたサービスがstartForeground()
を呼び出すという暗黙の約束があります。ただし、Android Oはバックグラウンドサービスとフォアグラウンドサービスに変更が加えられているため、古いstartService()
メソッドを使用した場合と比較してパフォーマンスが向上したものは他にありますか。今後のベストプラクティスですか?
これは、パフォーマンスの向上でも、メリットでも、ベストプラクティスでもありません。
API 26以降、システムはバックグラウンドアプリがバックグラウンドサービスを作成することを許可していません。
したがって、アプリがバックグラウンドにある場合(フォアグラウンドにある場合も同じことを歓迎します)、する必要があります以前のContext.startForegroundService(Intent)
の代わりにstartService(Intent)
を使用します。その後、サービスは開始後最初の5秒以内にstartForeground(int, Notification)
を呼び出す必要があります。そうしないと、システムはサービスを停止します。
また、バックグラウンドアプリからstartService(Intent)
を使用してサービスを開始する古い方法は、現在のリリースのAndroid Oreoでも機能するという情報がありますが、間もなく修正されます。
したがって、API 26以降、フォアグラウンドサービスを開始するときは常に、Context.startForegroundService(Intent)
の代わりに新しいstartService(Intent)
メソッドを使用する必要があります。
私が説明したように ここ 、startForegroundServiceには深刻な問題があり、必然的にANRの頻度が低くなります。この問題はアプリレベルでは修正できないため、startForegroundServiceは使用しないでください。同じ機能を実装するために JobSchedulerとJobService モデルに切り替えました。
後者のモデルはこれまでのところうまく機能しており、Playストアでアプリがクラッシュすることはもうありません。新しいモデルはまったく異なり、startForegroundServiceに基づいて既存のコードをリファクタリングするのに2日を費やしましたが、間違いなく成果を上げています。