Android 为什么在设备的睡眠模式下出现SoketTimeOutException?

Android 为什么在设备的睡眠模式下出现SoketTimeOutException?,android,service,alarmmanager,android-webservice,Android,Service,Alarmmanager,Android Webservice,我正在从报警管理器每1分钟调用一次的服务类调用web服务HTTPS连接。当我启动服务时,它工作正常,我从web服务得到响应,直到设备进入睡眠模式。当设备屏幕关闭时,在下一次web服务调用时,我收到此错误- com.turbomanage.httpclient.HttpRequestException: java.net.SocketTimeoutException: connect timed out 它将继续抛出此异常,直到我唤醒设备。当设备被唤醒时,Web服务开始从服务器获得响应,而

我正在从报警管理器每1分钟调用一次的服务类调用web服务HTTPS连接。当我启动服务时,它工作正常,我从web服务得到响应,直到设备进入睡眠模式。当设备屏幕关闭时,在下一次web服务调用时,我收到此错误-

   com.turbomanage.httpclient.HttpRequestException: java.net.SocketTimeoutException: connect timed out
它将继续抛出此异常,直到我唤醒设备。当设备被唤醒时,Web服务开始从服务器获得响应,而我没有收到异常。所以请告诉我问题出在哪里。测试设备是Nexsus 5X

我正在从服务类调用web服务HTTPS连接,该服务类每1分钟由alarm manager调用一次

这在Android 6.0+上不起作用,除非你的应用程序在电池优化白名单上。打瞌睡模式将停止你的大部分警报,在那些你可以控制的情况下,你可能无法访问互联网


此外,请记住,每分钟唤醒设备进行网络I/O操作都会耗尽电池电量,这也是Android 6.0首先引入瞌睡模式的原因。

针对瞌睡和应用程序待机进行优化

以及忽略电池优化的代码

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);
}

那么解决办法是什么呢?@shyam002:我不知道问题出在哪里。由于各种原因(例如飞机模式),无法保证您在任何时间点都能连接到互联网。您应该像处理任何其他连接不足时一样处理此问题。@shyam002:如果您希望最大限度地提高在Android 6.0+上以睡眠模式连接Internet的可能性,请用户将您的应用添加到电池优化白名单中。在运行Android 7.1.1的Nexus 5X上,即设置>应用程序>(齿轮图标)>特殊访问>电池优化。但是,您需要认识到,用户可能不会这样做,或者如果他们不喜欢您的应用程序使用的电池量,他们可能会改变主意,将您的应用程序从此列表中删除。