2013-03-04 134 views
1
URL url = new URL(myurl); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setReadTimeout(10000 /* milliseconds */); 
      conn.setConnectTimeout(15000 /* milliseconds */); 
      conn.setRequestMethod("GET"); 
      conn.setDoInput(true); 
      // Starts the query 
      conn.connect(); 
      int response = conn.getResponseCode(); 
      Log.d("1", "The response is: " + response); 


      in = new BufferedInputStream(conn.getInputStream()); 

      out = new FileOutputStream(file); 

      int bufferLength = 0; 
      byte[] buffer = new byte[1024]; 

      while ((bufferLength = in.read(buffer)) > 0) { 
       out.write(buffer, 0, bufferLength); 
      } 

我下载了一个小的xml文件,然后解析它并从该文件创建对象。下载文件需要很多时间

文件大小3,8 kB。但是在下载开始后,需要几秒钟的时间才能显示一些数据。 当我解析已经下载的文件没有互联网连接,它需要少于一秒钟来显示我的数据。从这个我得出结论,问题在于这种方法。 PS我忘了说,它是在那之后下载一些小缩略图。

我测量的时间

@Override 
protected ArrayList<?> parseData(File dataFile) { 
    // TODO Auto-generated method stub 
    long startTime = System.currentTimeMillis(); 




    ArrayList<Training> list = new ArrayList<Training>(); 
    MyParser parser = new MyParser(); 
    MyFileDownloader downloader = new MyFileDownloader(); 
    try { 
     list = parser.parseTrainings(dataFile); 
     boolean networkAvaible = fragment.isNetworkAvailable(); 
     for (int i = 0; i < list.size(); i++) { 
      if (networkAvaible) 
       downloader.downloadFile(list.get(i).getImageURL(), new File(fragment.getDataFolder(), "image"+i)); 
      String path = fragment.getDataFolder().getPath() + "/image"+i; 
      Drawable im = Drawable.createFromPath(path); 
      list.get(i).setImage(im); 
     } 

    } catch (XPathExpressionException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (XmlPullParserException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ParserConfigurationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SAXException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    long stopTime = System.currentTimeMillis(); 
    long elapsedTime = stopTime - startTime; 
    Log.d("******TIME PASSED******", String.valueOf(elapsedTime)); 
    return list; 

当有互联网连接,我需要下载的文件就需要大约9-11秒。 而当没有需要下载它时,大约需要0.5秒。我怎样才能减少下载这些文件的时间? 文件大小的总和是5236 Mbits。应该用我的20Mbps Wi-Fi下载少于1秒。一两秒钟就可以了。但9秒甚至16秒?这是不好的用户体验。

+0

拆下(在=新的BufferedInputStream)使用的InputStream。你的代码看起来不错。可能是您的网络速度有问题。 – kumar 2013-03-04 12:47:01

+0

不,在Wi-Fi上约为20 Mbps。 为什么不使用缓冲输入?这种方式不是更快吗? – user1685095 2013-03-04 17:12:07

+0

我已经考虑使用另一个AsyncTask在ListAdapter的getView()方法中下载所需的文件(我使用自定义的ListFragment向用户表示数据)。但我不想要这个解决方案,因为这个列表非常小(5-10个元素)。 – user1685095 2013-03-04 17:24:35

回答

0

尝试使用asynctask下载files.here是一个很好的例子,请参阅此。

http://www.androidhive.info/2012/04/android-downloading-file-by-showing-progress-bar/

+0

我已经在使用它。这个方法在AsyncTask中调用。问题是为什么它需要很长时间来下载文件?我可以让这个更快吗?它可能是它只是缓慢server.Right现在文件在Dropbox。我可以通过获取系统时间来衡量下载时间......也许这会提供一些有用的信息,你觉得怎么样? – user1685095 2013-03-04 16:36:23