多线程下载的使用的方法是分治法,把一个问题分成多个子问题,每个子问题解决之后,总问题也就得到了解决。子问题还可以细分为子子问题,当我们的计算资源有剩余时就应该增加细分粒度。
比如我们有一个大小为100M的文件需要处理,我们用10个线程来分解这100M文件,每个线程分到10M。假如10个线程同时开始,但是线程调度出现严重问题导致只有2个线程下载完了20M,我们还有80M内容需要下载,又假如此时用户点了暂停和重新开始。我们有10个线程,接下来就还是用这10个线程来处理80M的内容,这样线程也得到了充分的利用。当然如果按照之前每个线程处理10M也可以,而且还不用重新计算每个线程处理文件时的偏移信息。
我们来看看Android上的多线程下载怎么来实现。
1.获取某个URL对应的内容大小,这个可能是个html/txt/exe/apk等,反正就是一个URL,我们调用
java.net.URLConnection.getContentLength()方法可以获取一个URL对应的内容大小,比如一个文件100M
2.我们分配使用多少个线程来处理这个流,比如我们声明3个
3.随机一个全局的文件名 UUID.randomUUID()
4.