J'essaie de créer une application qui peut m'aider à évaluer le temps de téléchargement du fichier à partir d'une ressource Web. J'ai trouvé 2 échantillons:Mise à jour de la boîte de dialogue de progression
Download a file with Android, and showing the progress in a ProgressDialog
et
http://www.helloandroid.com/tutorials/how-download-fileimage-url-your-device
Le deuxième exemple montre un petit temps de téléchargement, mais je ne peux pas comprendre comment mettre à jour dialogue de progression de l'utiliser. Je pense que quelque chose devrait être fait avec "tandis que" l'expression dans le deuxième cas, mais je ne peux pas trouver quoi. Quelqu'un pourrait-il me donner un conseil?
UPD:
1er code:
try {
time1 = System.currentTimeMillis();
URL url = new URL(path);
URLConnection conexion = url.openConnection();
conexion.connect();
// this will be useful so that you can show a tipical 0-100% progress bar
int lenghtOfFile = conexion.getContentLength();
// downlod the file
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream("/sdcard/analyzer/test.jpg");
byte data[] = new byte[1024];
long total = 0;
time11 = System.currentTimeMillis();
while ((count = input.read(data)) != -1) {
total += count;
// publishing the progress....
publishProgress((int)(total*100/lenghtOfFile));
output.write(data, 0, count);
}
time22= System.currentTimeMillis()-time11;
output.flush();
output.close();
input.close();
} catch (Exception e) {}
timetaken = System.currentTimeMillis() - time1;
2ème code:
long time1 = System.currentTimeMillis();
DownloadFromUrl(path, "test.jpg");
long timetaken = System.currentTimeMillis() - time1;
Où
public void DownloadFromUrl(String imageURL, String fileName) { //this is the downloader method
try {
URL url = new URL(imageURL); //you can write here any link
File file = new File(fileName);
/*Open a connection to that URL. */
URLConnection ucon = url.openConnection();
/*
* Define InputStreams to read from the URLConnection.
*/
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
/*
* Read bytes to the Buffer until there is nothing more to read(-1).
*/
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
/* Convert the Bytes read to a String. */
FileOutputStream fos = new FileOutputStream(PATH+file);
fos.write(baf.toByteArray());
fos.close();
} catch (IOException e) {
Log.d("ImageManager", "Error: " + e);
}
Donc, la chose est que la première méthode semble être plus lent pour environ 30%.
J'exécute la 2ème méthode dans Asynctask. – StalkerRus
Eh bien, le 1er code a un tampon de 1024 octets, tandis que le second n'en a que 50. – trashgod
J'ai essayé de réduire la mémoire tampon à 50. Mais je n'ai vu aucun changement dans les performances. – StalkerRus