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 그러나 다운로드 시작 후 몇 가지 데이터를 표시하는 데 몇 초가 걸립니다. 인터넷 연결없이 이미 다운로드 한 파일을 구문 분석 할 때 데이터를 표시하는 데 1 초도 걸리지 않습니다. 그 결론은이 방법에 문제가 있다고 결론 내렸다. 추신 : 그 후 작은 미리보기 이미지를 다운로드 중입니다.
나는 인터넷 연결이
@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 초 이내에 다운로드해야합니다. 1-2 초 정도면 괜찮을 것입니다. 하지만 9 초 또는 16 초가 걸렸습니까? 그것은 나쁜 사용자 경험입니다.
제거 (= 새로운 BufferedInputStream을의가)의 InputStream를 사용합니다. 귀하의 코드는 괜찮아 보입니다. 네트워크 속도에 문제가있을 수 있습니다. – kumar
아니요, Wi-Fi에서 약 20Mbps입니다. 버퍼 된 입력을 사용하지 않는 이유는 무엇입니까? 속도가 느리지 않아야합니까? – user1685095
다른 AsyncTask를 사용하여 ListAdapter의 getView() 메소드에서 필요한 파일을 다운로드하는 것을 고려했습니다. 사용자에게 ListFragment를 사용하여 데이터를 나타냅니다. 그러나 목록이 실제로 작기 때문에 (5 ~ 10 요소)이 솔루션을 원하지 않습니다. – user1685095