2013-03-04 126 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