我开始创建文件下载类。这就是我所拥有的:
public class Downloader {
//download url
URL url;
public Downloader(URL downloadURL){
url = downloadURL;
}
public void toFile(File fName) {
try {
HttpURLConnection urlConnection = (HttpURLConnection) url
.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
FileOutputStream fileOutput = new FileOutputStream(fName);
InputStream inputStream = urlConnection.getInputStream();
byte[] buffer = new byte[1024];
int bufferLength = 0;
while ((bufferLength = inputStream.read(buffer)) > 0) {
fileOutput.write(buffer, 0, bufferLength);
}
fileOutput.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}我需要在新线程中调用这个下载器。也许有人能给我一些提示,为什么我需要为此调用新的线程或asyc任务。
public void downloadFile(String urlToDownload,String path) throws MalformedURLException{
new Thread(new Runnable() {
public void run() {
new Downloader(new URL(urlToDownload)).toFile(new File(path));
}
}).start();
}所以当我想下载我的文件时,它是异步下载的。
我不是真的想要那样。我想创建下载程序,我可以选择是同步还是异步下载文件。
但首先,我想知道文件是什么时候下载的。我怎么会知道呢?
也许有人做了这件事,可以帮助我。我需要知道文件什么时候下载的。
谢谢。
发布于 2012-03-27 15:45:34
发布于 2012-03-27 15:49:27
在您调用
+方法doInBackground()将在工作线程中运行
+方法onPostExecute(0将运行以更新UI线程
我需要在新线程中调用这个下载器。也许有人可以提示我为什么需要为此调用新的线程或asyc任务
Answer:你需要在单独的线程或异步任务中下载,以避免ANR对话̣̣(如果你需要下载大文件或者你的网络连接很慢,这可能会导致ANR对话在主UI线程中),这就是为什么你需要将高工作负载实现放在工作线程中而不是主UI线程中:
参考:http://developer.android.com/guide/practices/design/responsiveness.html
发布于 2012-03-27 15:36:14
使用Handler了解您的文件何时下载。
https://stackoverflow.com/questions/9885043
复制相似问题