最近发现,在我访问网络的时候,如果地址是通的则好,如果服务关闭了(最近做程序版本更新,把服务器关了测试),程序一直被卡住,长达30秒的时间一直处于无响应状态,直到抛异常(从访问网络到抛此异常时间大概30秒)。我是这样处理的,抛出异常我在Activity抓取,然后dialog一下。这样做的话还是不行,因为这期间响应的时间太长了。用URLUtil.isNetworkUrl(url)方法来判断不顶用。
然后我用debug跟踪了一次,如果有con.getResponseCode()判断,在这个判断上无响应30秒抛异常;如果没有获取返回状态码判断,则在con.getInputStream()无响应30秒再抛。这让我崩溃了
不知道大家是怎么处理的,请教一下大牛

解决方案 »

  1.   

       我们处理方式也只是在这等待的30s左右期间给予动态提示 比如:正在连接网络... 之类的网络连接失败时再dailog提示了
      

  2.   

    我晕也这样吗?这太那啥了吧,让人等得很纠结啊
       而且现在这个dialog不出来,只有网络是通的时候才能dialog出来,特奇怪
      

  3.   

    哦?哪一般为几s呢?还有你们帮我看下:
    String path = "http://192.168.10.115/Cloud_Server/VersionServlet";
    oldVersion = getPackageManager().getPackageInfo(getPackageName(),
    PackageManager.GET_PERMISSIONS).versionName;
    String[] params = new String[] { path, oldVersion };
    progressDialog = ProgressDialog.show(this, "请稍候", "正在检测服务器版本...", true);//这句执行了为什么dialog不出来呢?
    AsyncTask<String, Integer, Boolean> execute = new PrapareVersionThread()
    .execute(params);
    prapareVersion = execute.get();
      

  4.   

    使用HttpClient包进行网络请求,可以设置超时时间,设置你想要的范围就可以了
      

  5.   

    谢谢各位,原来真的是我调成setReadTimeOut方法了。结果每次时间超过了五分钟,我快崩溃了。现在改过来已经好了,再次谢谢各位
      

  6.   

    楼主是不是显示Dialog和HTTP全部都在一个线程里啊
    可以在需要网络连接前显示一个Dialog,然后新建一个线程获取网络数据,然后再用Handle更新到界面