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秒?這是不好的用戶體驗。
拆下(在=新的BufferedInputStream)使用的InputStream。你的代碼看起來不錯。可能是您的網絡速度有問題。 – kumar 2013-03-04 12:47:01
不,在Wi-Fi上約爲20 Mbps。 爲什麼不使用緩衝輸入?這種方式不是更快嗎? – user1685095 2013-03-04 17:12:07
我已經考慮使用另一個AsyncTask在ListAdapter的getView()方法中下載所需的文件(我使用自定義的ListFragment向用戶表示數據)。但我不想要這個解決方案,因爲這個列表非常小(5-10個元素)。 – user1685095 2013-03-04 17:24:35