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


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

            操作机制是,服务器返回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();
            }    
        }
        

      

  • 相关阅读:
    [自用] 数论和组合计数类数学相关(定理&证明&板子)
    OI回忆录?
    [UOJ310] 黎明前的巧克力
    [总结] 后缀自动机学习笔记
    [总结] 动态点分治学习笔记
    [HEOI2018] 秘密袭击coat
    [51nod1355] 斐波那契的最小公倍数
    [SRM601] WinterAndSnowmen
    [总结] 二项式反演学习笔记
    [Luogu4705] 玩游戏
  • 原文地址:https://www.cnblogs.com/lucky-star-star/p/4167839.html
Copyright © 2020-2023  润新知