为什么我在设备的睡眠模式下出现 SocketTimeOutException?

why i am getting SoketTimeOutException in sleep mode of device?

我正在从服务 class 调用 Web 服务 HTTPS 连接,警报管理器每隔 1 次调用一次 min.When 我启动服务,它工作正常 我从 Web 服务获得响应,直到设备进入睡眠状态 mode.when 设备的屏幕关闭,在下一次 Web 服务调用时出现此错误-

   com.turbomanage.httpclient.HttpRequestException: java.net.SocketTimeoutException: connect timed out

它将继续抛出此异常,直到我唤醒 device.When 设备被唤醒,网络服务开始从服务器获得响应,然后我没有收到异常。所以请任何人告诉我 problem.The 测试设备可能是 Nexsus 5X.

I am calling a web service HTTPS connection from Service class which is called by alarm manager in every 1 min

这不适用于 Android 6.0+,除非您的应用在电池优化白名单中。打瞌睡模式会停止大部分闹钟,在您可以控制的情况下,您可能无法访问互联网。

此外,请记住每分钟唤醒设备并执行网络 I/O 会耗尽电池电量,这就是 Android 6.0 首先引入打盹模式的原因。

优化打瞌睡和应用待机

https://developer.android.com/training/monitoring-device-state/doze-standby

以及忽略电池优化的代码

PowerManager powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
if (powerManager.isIgnoringBatteryOptimizations(getPackageName())) {
    intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
}
else {
    intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    intent.setData(Uri.parse("package:" + getPackageName()));
    startActivity(intent);
}