私は、サービスをアクティビティのライフタイムを超えて生きているようにしています。携帯電話間でAndroidサービスのライフサイクルが異なる
アクティビティとは異なるプロセスでアクティビティを開始する2台の携帯電話(Samsung Galaxy S6とSony Xperia Z3 Compact)で、サービスが表示されている間にアプリをスワイプして通知を表示すると、サービスが有効になります。
第3の電話機では、Huawei Honor 8と全く同じコードがサービスを破棄し、すぐにスケジュールされたアラームをキャンセルします。
私は10秒ごとにアラームを設定しました(彼らはHuaweiで一度キャンセルされ、Samsung/Sonyで動作します)。また、バックグラウンドでサービスを実行しているときにLocationListenerをアクティブにします。
もう1つの違いは、ワーキング電話のプライオリティMAXと進行中の通知は、スワイプまたはクリアすることで取り消すことはできませんが、Huaweiでも可能です。
バッテリの最適化やその他の設定を何の違いもなく無視するようにリクエストしました。私はまた、画面が消えている間にアプリを殺さないという選択肢を探してみましたが、Huaweiは一度にそうしているようです。
このシナリオについては、アクティビティが強制終了された後、またはアクティブになっていない状態でサービスを実行し続けることができます。メモリが足りない場合、メモリはほとんど消費されないため、アクティビティは行われますが、サービスは実行されません。しかし、この設定では、サービスは即座に殺されます。
可能性のある特定の製造設定を見ても、コードから予測や制御ができませんか?
私はこのタイプの問題で唯一可能な解決策は、サービスが頻繁に生存しているかどうかをチェックするサイレントプッシュを送信し、アクティブにする必要があるときに再起動することですとにかくそれを殺すシステム)。
解決方法はわかりませんが、Playストアで配信していて修正が見つからない場合は、問題のあるデバイスをサポートされているデバイスリストから除外できます。 – nasch
Huaweiには「画面をオフにしないでアプリを殺さない」オプションがありますが、コードでこの値を設定するオプションをまだ見つけていないので、バッテリーを使用すると、optmizationは許可されていないので効果がないようです。 – Deukalion