【问题标题】:download function in separate thread在单独的线程中下载功能
【发布时间】:2014-11-03 18:39:18
【问题描述】:

在我的 android 应用程序中,偶尔会有一些文件需要下载。 所以我写了一个这样的下载函数:

public static void download(Context context, String url, String path) {
   URLConnection conection = new URL(url).openConnection();
   conection.connect();
   InputStream is = new URL(url).openStream();
   OutputStream os = context.openFileOutput(path, 0);
   pipe(is, os);   // write from inputstream to outputstream
   os.close();
}

我不能决定是否将此函数放在单独的线程中?
当我把它放在一个单独的线程中时,如果我想用 for 循环下载 10 个文件,那么它们都开始在 10 个同时单独的线程中下载,这不好! 当我不放入单独的线程时,主线程必须等到下载完成,这也不好!

解决办法是什么?

【问题讨论】:

  • 线程 + 固定大小的池执行器

标签: java android multithreading networking


【解决方案1】:

解决方法是不要把这个函数放到线程中,而是在需要的时候从线程中调用函数。

【讨论】:

    【解决方案2】:

    如果您希望同时在后台下载文件并让它们一次下载一个,请使用 ThreadPoolExecutor 并向其提交 Runnables:

    http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html

    【讨论】: