设备处于睡眠模式时的 URLConnection 不起作用

Posted

技术标签:

【中文标题】设备处于睡眠模式时的 URLConnection 不起作用【英文标题】:URLConnection when device is in sleep mode not working 【发布时间】:2011-10-07 17:22:28 【问题描述】:

我在设备处于睡眠模式时遇到后台服务问题。我设置了一个闹钟,每天早上 9 点开始服务。该服务在设备处于唤醒状态时可以正常工作,但在设备处于休眠状态时会失败。

我已将问题追溯到如下所示的 URLConnection.openConnection() 调用。设备在睡眠模式下似乎无法打开此连接,它会引发 IOException。 我使用 URL.openStream() 在设备休眠时执行网络调用,它们工作正常。

谁能解释为什么 openStream() 可以在睡眠模式下工作,而 openConnection() 不能?有没有办法让它工作?

这在睡眠模式下工作:

return new BufferedReader(new InputStreamReader(new URL(url).openStream()), 8192);

这在睡眠模式下似乎不起作用:

URL actualURL = new URL(url.toString());
URLConnection c = actualURL.openConnection();
c.setConnectTimeout(10000);
c.setReadTimeout(20000);
InputStreamReader inputStreamReader = new InputStreamReader(c.getInputStream());
bufferedReader = new BufferedReader(inputStreamReader);

【问题讨论】:

【参考方案1】:

URLConnection 代码从后台线程移动到服务解决了这个问题,现在它可以在睡眠模式下工作。日志记录在处于睡眠模式的线程中工作,但不是openConnection()

【讨论】:

以上是关于设备处于睡眠模式时的 URLConnection 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

设备处于睡眠模式时不会出现 Android GCM 通知

您能否以编程方式检查以确定您的 android 设备是不是处于深度睡眠模式?

Android 在设备处于睡眠状态时获取 GPS 坐标更新(屏幕已关闭)

iphone 处于睡眠模式时,iphone 应用程序延迟 10 -15 分钟

当移动设备处于睡眠模式或浏览器处于后台时,如何使用 Web 应用程序在移动浏览器中使用 HTML Geolocation API 获取位置?

哪些事件可以唤醒处于睡眠状态的 Android 设备?