我有一个连接到Web服务的应用程序.只要我在应用程序的生命周期内忠于自己的连接类型,就可以使用WIFI或3G多次连接到Web服务,而不会出现任何问题.那就是如果我不从WIFI切换到3G.如果我从WIFI切换到3G,将无法再获得响应.我的连接一直在等待响应.
我在下面尝试了4种情况.我只对第三种情况有疑问.可能是什么问题呢?
第一种情况:连接始终在WIFI上(确定)
>应用程序使用WIFI连接到Web服务.
>已成功收到响应.
>应用程序再次使用WIFI连接到Web服务.
>响应已成功接收.
第二种情况:连接始终在3G上(确定)
>应用程序使用WIFI连接到Web服务.
>已成功收到响应.
>应用程序再次使用WIFI连接到Web服务.
>响应已成功接收.
第三种情况:连接从WIFI切换到3G(无响应)
>应用程序使用WIFI连接到Web服务.
>已成功收到响应.
>连接已切换到3G. WIFI已禁用. 3G已启用.
>应用程序再次使用3G连接到Web服务.
>没有收到响应或错误.应用程序继续等待响应.在调用getResponseCode之前显示了最后一个日志.
第四种情况:连接从3G切换到WIFI(确定)
>应用程序使用3G连接到Web服务.
>已成功收到响应.
>连接已切换为WIFI. 3G已禁用. WIFI已启用.
>应用程序再次使用WIFI连接到Web服务.
>响应已成功接收.
我的猜测是默认情况下,httpURLConnection认为WIFI是比3G更好的连接类型.因此,当连接从WIFI切换到3G时,httpURLConnection拒绝确认3G并仍尝试使用WIFI进行连接.另一方面,由于WIFI是更好的连接类型,因此httpURLConnection允许从3G切换到WIFI.我对此正确吗?如果可以,如何允许从WIFI切换到3G?
下面是我的代码片段:(每次连接到Web服务时,我都会调用它.)
//open new connectionhttpsURLConnection = (httpURLConnection) ((new URL(url)).openConnection());httpsURLConnection.setDoinput(isDoinput);httpsURLConnection.setDoOutput(isDoOutput);try{ //supply parameters OutputStreamWriter wr = new OutputStreamWriter(httpsURLConnection.getoutputStream()); wr.write(data); wr.flush(); if(httpURLConnection != null) { if (httpsURLConnection.getResponseCode() == httpsURLConnection.http_OK) //connection hangs here { //some code } else { //some code } }}catch(Exception e){}
解决方法:
我不知道为什么,但是在代码上添加System.setProperty(“ http.keepAlive”,“ false”)可以解决问题.
根据AndroID开发者博客(androids-http-clients)的说法,httpURLConnection在Froyo之前存在一个错误,可以通过禁用连接池来解决,就像上面一样.但是,我使用的是Gingerbread,所以我不确定为什么httpURLConnection仍然在我的应用程序中行为异常.
致他人:如果您可以提供更多解释,请随时编辑我的帖子.
总结以上是内存溢出为你收集整理的从WiFi连接切换到3g导致连接挂起?全部内容,希望文章能够帮你解决从WiFi连接切换到3g导致连接挂起?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)