首页 > 代码库 > 多幅图像下载的时间效率问题

多幅图像下载的时间效率问题

        项目碰到了问题,就是多个头像下载的时候,会出现下载不全,下载慢的问题。

        操作机制是,服务器返回URL, 本地将这些URL放在一个二维数组中,第一列存头像的URL,第二列存头像的本地文件地址。

            1.首先是下载不全的问题,一般这种情况是下载头像的异步任务,出现了不连续性执行的情况,比如当下载图像的URL列表中出现有空字符串或者null时,异步任务会捕捉异常,不再继续接着往下下载,所以出现下载不全的问题。起初的解决方法是,在下载头像的异步任务中,循环下载的时候,如果取到的URL为空,则不执行调取下载图片的工具类函数,这样的结果是,不会出现下载不全,但是下载速度着实让人捉急!所以转回到了下载慢的问题。

            2、下载速度慢,一般是数据结构处理不当,这里我用了二维数组就是一个槽点,并且在异步任务中,循环下载的头像的时候,进行判断,着实更是加了一步,应该传给异步任务一个不需再处理的数据,然后让异步任务自己去执行,所以最后我改回了采用arraylist,1,这样可以动态添加非空的字符串,2.一维的arraylist处理效率要高很多,所以最后的代码就是这样:

//下面是初始化下载列表的参数if(!commentContent.commentportraiturl.equals("")){                                    commentImgHeadURl.add(commentContent.commentportraiturl);                                    commentImgHeadURl.add(GPUtils.getAppPath().replace("/wrongpic", "/newspic")    +"/newspic"                                                        +commentContent.commenttopic+ commentContent.commentuid + ".jpg");                                }

 

//下载讨论列表用户头像的异步任务    private class DownloadImgTask extends AsyncTask<ArrayList<String>, String, String>{        private ArrayList<String> commentImgUrl = null;        public DownloadImgTask(ArrayList<String> commentImgUrl) {            // TODO Auto-generated constructor stub            this.commentImgUrl = commentImgUrl;        }        protected void onPreExecute() {            //TODO:缓冲提示            super.onPreExecute();        }        @Override        protected String doInBackground(ArrayList<String>... params) {            // TODO Auto-generated method stub            //在此获取要下载的图片的url            com.haojiazhang.download.DownloadManager dm = GPUtils.GetDownloadManager();            try {                for(int i = 0; i < commentImgUrl.size(); i=i+2){//一对一对的取数据,第一个是下载的URL,第二个是存本地的图像路径                    if(!dm.downloadImg(commentImgUrl.get(i),commentImgUrl.get(i+1)))                        return "isdownloadfail";                }                return "isdownloadok";            } catch (Exception e){                            }            return null;        }                    protected void onPostExecute(String result) {            if(result!=null && result.equalsIgnoreCase("isdownloadok")){                //                GPUtils.toast(context, "题目下载成功");                discussesAdapter.notifyDataSetChanged();                            }else {//                GPUtils.toast(context, "题目下载失败");            }            super.onPostExecute(result);        }        protected void onCancelled() {            super.onCancelled();        }        }    

 

  

 

多幅图像下载的时间效率问题