バックグラウンドで実行され、「通常モード」で正常に動作するhttpリクエストを送信するためのサービスがあります。問題は、スマートフォンを「バッテリーセーバーモード」にするとサービスが機能しなくなることです。しかし、Whatsappのようなアプリはまだ機能しています。何が起こっているのか分かりますか?
Whatsappなどのモバイルアプリケーションは、Doze /バッテリー節約およびアプリスタンバイモードから除外する許可を要求している必要があります。
設定>バッテリー>バッテリーの最適化でホワイトリストを構成することにより、これを手動で構成することが可能です。
または、API 23から、アクセス許可モデルを使用して、ユーザーにホワイトリストへの登録を要求できます( this を参照)。 APIから isIgnoringBatteryOptimizations() を呼び出して、アプリが現在ホワイトリストにあるかどうかを確認することもできます
ただし、自分でホワイトリストに登録するには、特定の 基準 を満たす必要があります。そうしないと、Google Playストアでアプリをメンテナンスしているときに問題が発生します。
ただし、Whatsappなどのメッセンジャーアプリは、優先度の高いプッシュ通知によってトリガーされるため、バックグラウンドプロセスを実行していなくてもアクティブになる可能性が高くなります。
権限を追加
<uses-permission
Android:name="Android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
アプリのホワイトリストをリクエストする
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent intent = new Intent();
String packageName = getPackageName();
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
if (!pm.isIgnoringBatteryOptimizations(packageName)) {
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
startActivity(intent);
}
}
バックグラウンドサービスはマシュマロ以降に取り組んでおり、オレオ以降はフォアグラウンドでの使用以外には使用しないでください。
居眠りモードは、アクティブな間は操作を禁止し、電話はX時間ごとに数Msの間、居眠りを解除します。一部のライブラリでは、その時間中にいくつかの操作を行うことができます。
ドーズ&バッテリーセーバー中にバックグラウンド操作を実行する場合は、 JobScheduler を見て、電話がドーズしていないときに15分以上ごとに実行される操作を確認します。より頻繁に操作が必要な場合は、 JobDispatcher を確認することをお勧めします。居眠りモードを抜けると、どちらもタスクを実行します