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。ただし、ダウンロード開始後、データが表示されるまで数秒かかります。インターネットに接続せずにダウンロード済みのファイルを解析すると、データが表示されるまでに 1 秒もかかりません。そのことから、問題はこの方法にあると結論付けました。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 Mbit です。私の 20Mbps Wi-Fi では 1 秒未満でダウンロードされるはずです。1秒か2秒でいいです。しかし、9 秒か 16 秒でしょうか。それは悪いユーザーエクスペリエンスです。

4

1 に答える 1

0

ファイルのダウンロードに asynctask を使用してみてください。こちらが良い例です。これを参照してください。

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

于 2013-03-04T15:01:45.197 に答える