【问题标题】:why i am getting SoketTimeOutException in sleep mode of device?为什么我在设备的睡眠模式下得到 SocketTimeOutException?
【发布时间】:2017-08-05 14:04:56
【问题描述】:

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

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

它将继续抛出此异常,直到我唤醒设备。当设备唤醒时,Web 服务开始从服务器获取响应,然后我没有收到异常。所以请任何人告诉我可能是什么问题。测试设备是 Nexsus 5X

【问题讨论】:

    标签: android service alarmmanager android-webservice


    【解决方案1】:

    我正在从服务类调用 Web 服务 HTTPS 连接,警报管理器每 1 分钟调用一次

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

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

    【讨论】:

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

    针对打盹和应用待机进行优化

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      相关资源
      最近更新 更多