运行 节电模式下的后台服务 Android
Run background services on battery saver mode Android
我有一个发送 http 请求的服务,该服务在后台运行并且在 "normal mode" 上运行良好。问题是当我将 phone 置于 "battery saver mode" 时,服务无法正常工作。但是,像 Whatsapp 这样的应用程序仍然可以使用。你知道发生了什么事吗?
像 Whatsapp 这样的移动应用程序必须请求权限才能免除它们 Doze/battery 保存和应用程序待机模式。
可以通过在设置>电池>电池优化中配置白名单来手动配置。
或者从API 23,你可以使用权限模型来请求用户将他们列入白名单(参考this). From API You can also check whether your app is currently on White list by calling isIgnoringBatteryOptimizations()
但是您需要满足某些 criteria 才能将自己列入白名单。否则,您在 Google Play Store 上维护应用程序时会遇到问题。
但大多数像 Whatsapp 这样的消息应用程序都是通过 high-priority 推送通知触发的,因此即使没有 运行 后台进程,它们也更有可能处于活动状态。
自 Marshmallow 以来,后台服务一直在开发中,自 Oreo 以来,除前台使用外,不再用于任何其他用途。
打瞌睡模式将在激活时禁止任何操作,phone 每隔 X 小时就会停止打瞌睡几毫秒,某些库将允许您在此期间进行一些操作。
如果您想在休眠和节电模式期间执行一些后台操作,您可能需要查看 JobScheduler for operation that will be executed every 15 minutes or more while the phone is not in doze and if you require operations more often, i would advice you to have a look at the JobDispatcher。两者都将在退出打瞌睡模式时执行您的任务
添加权限
<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);
}
}
使用 worker 将使您的应用程序能够 运行 打瞌睡 windows 但网络调用将被禁止。
因此您需要请求忽略电池优化,以便您可以进行网络调用。
我有一个发送 http 请求的服务,该服务在后台运行并且在 "normal mode" 上运行良好。问题是当我将 phone 置于 "battery saver mode" 时,服务无法正常工作。但是,像 Whatsapp 这样的应用程序仍然可以使用。你知道发生了什么事吗?
像 Whatsapp 这样的移动应用程序必须请求权限才能免除它们 Doze/battery 保存和应用程序待机模式。
可以通过在设置>电池>电池优化中配置白名单来手动配置。
或者从API 23,你可以使用权限模型来请求用户将他们列入白名单(参考this). From API You can also check whether your app is currently on White list by calling isIgnoringBatteryOptimizations()
但是您需要满足某些 criteria 才能将自己列入白名单。否则,您在 Google Play Store 上维护应用程序时会遇到问题。
但大多数像 Whatsapp 这样的消息应用程序都是通过 high-priority 推送通知触发的,因此即使没有 运行 后台进程,它们也更有可能处于活动状态。
自 Marshmallow 以来,后台服务一直在开发中,自 Oreo 以来,除前台使用外,不再用于任何其他用途。
打瞌睡模式将在激活时禁止任何操作,phone 每隔 X 小时就会停止打瞌睡几毫秒,某些库将允许您在此期间进行一些操作。
如果您想在休眠和节电模式期间执行一些后台操作,您可能需要查看 JobScheduler for operation that will be executed every 15 minutes or more while the phone is not in doze and if you require operations more often, i would advice you to have a look at the JobDispatcher。两者都将在退出打瞌睡模式时执行您的任务
添加权限
<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);
}
}
使用 worker 将使您的应用程序能够 运行 打瞌睡 windows 但网络调用将被禁止。 因此您需要请求忽略电池优化,以便您可以进行网络调用。