举个例子
我有一个for循环,循环一个数组,数组中每一个值都是一个资源的下载链接
我循环这个数组,调用下载方法。...
        for(int i = 0; i < testStrings.length; i++)
                downloadRes(testStrings[i]);
...
private void downloadRes(String URL) {
...
}
我能确定的是,调用方法的传入参数设置为final时,for循环会等前一个资源下载完毕后继续下载下一个资源。
但如果不是final的参数,那么他可能就会在前一个资源还没下载完毕时就会下载下一个资源,这样参数就会混乱,第二次调用时的相关对象就会覆盖第一次调用时牵扯的对象。。
这样的方法我写过两次,一次是下载apk,一次是下载图片,但是我发现下载图片时他就能等前一个图下载完成后下另一个,但是下载apk时程序就乱了求助为什么个人猜想,图片很小是这样么?谢谢。

解决方案 »

  1.   

    downloadRes的具体内容是在一个线程中执行的还是在主UI线程执行的?
      

  2.   

    传入参数设置为final吧。因为,不final,你的下载机制就是有这个缺陷,图片不过刚好小,apk刚好大罢了。
      

  3.   

    你说的传人参数是指资源的URL吗?你是在一个数组中保存资源的URL的,这个URL是否为final和下载的逻辑有关系吗?
      

  4.   

    不太理解楼主的思路,我也下我的思路:建议建立一张表  也就是我们的下载列表对应这两组boolea值   第一组   用来标记是否已经下载完,第二组 标记暂停或者开始.用一个线程来读取表中的内容,通过boolean在确定暂停,继续,下载线程中的东西就不写了.那么通过添加表中内容,也就是添加下载列表.然后开启线程,已经下完了的不用下.没有下完的则可以继续下载,直到下载完.而且还可以通过id来实现,下载个数的控制.楼主可以用 三个数组  一个字符串数组 两个boolean数组来试一下.这个思路我觉得蛮好用的.希望对楼主有所帮助
      

  5.   


    关于主线程和子线程我一直都有疑惑。
    两个例子,下载apk是在new Thread中调用的,应该算子线程吧。
    后者也是在new thead中调用过的。。应该也算子线程吧。
    顺便问一句,如果我的某一个方法是在线程中调用的,然后这个方法又调用另一个方法,那“另一个方法”是不是算在子线程中执行的
    谢谢。
      

  6.   


    有的,如果不是final,当下载大文件时,你的参数的值就串了。
    你可以简单写个DEMO就知道了,很恶心