设备处于睡眠模式时的 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 设备是不是处于深度睡眠模式?
Android 在设备处于睡眠状态时获取 GPS 坐标更新(屏幕已关闭)
iphone 处于睡眠模式时,iphone 应用程序延迟 10 -15 分钟
当移动设备处于睡眠模式或浏览器处于后台时,如何使用 Web 应用程序在移动浏览器中使用 HTML Geolocation API 获取位置?