我已经测试了一些关于如何加速多次下载的方法。
此表显示了使用单个线程或每次下载的新线程通过不同网络从2到10张图像下载(使用三星Galaxy S1)的速度。
Multithread SingleThread
Images Wifi 3g Wifi 3g
2 1,1 6,6 2,0 6,7
4 1,7 8,0 5,2 9,6
6 2,1 6,1 7,5 15,5
8 2,3 7,1 10,2 20,0
10 2,3 12,5 13,5 26,7这些结果表明,多线程下载可以大大加速任务的执行。
然后我尝试了相同的代码,但是使用HTC Wildfire,当线程下载的数量很高时,UI线程运行的流畅性要低得多。
我添加了启动每个低优先级线程的代码:
Thread t= new Thread{
public void run(){
download(image[i]);
}
t.setPriority(Thread.MIN_PRIORITY)
t.start但问题依然存在。有没有办法让这些线程不会对UI线程产生太大的影响?如果不是,我如何检测线程的数量并使其适应运行应用程序的设备?
谢谢
注意:这十个图像有不同的大小,所以没有必要逐列读表
发布于 2011-08-06 11:35:45
在三星手机中,由于某些原因,线程与UI线程竞争资源。尝试将线程优先级设置为background...this将确保线程不会与UI线程竞争,好消息是它将跨所有异步任务工作。查看devices..If的源代码,他们会将线程优先级设置为上面提到的值
发布于 2011-08-06 11:53:34
对于下载,请始终使用AsyncTask,它可以执行此操作(如果需要,还可以让您轻松发布下载完成)。此外,就UI感觉不流畅而言,除了线程之外,还有许多其他因素也会导致这种情况。使用DDMS运行您的代码,并验证如果您的测试正在进行其他任何操作,您不会导致GC不断触发。
根据我的经验,在Android上设置线程优先级对于通过降低线程优先级来获得更好的性能来说,结果好坏参半。异步任务似乎更一致地做到了这一点。
https://stackoverflow.com/questions/6964380
复制相似问题