图片预加载优化

来源:互联网 发布:硬盘linux系统安装教程 编辑:程序博客网 时间:2024/06/14 17:13

最近app 做优化的,其实优化的点很多,在图片方面,一开始进入酒店详情的时候,对于酒店的大图,由于图片太大,要对图片做预加载处理,这样我门进酒店的详情页 才不会出现加载延迟,

具体的方案是在跳转的时候进行预存:

        String hotelBigURL = wiseHotelInfoViewModel.hotelBasicInfo.hotelBigURL;        if (!StringUtil.emptyOrNull(hotelBigURL)) {            hotelDetailCacheBean.mImageBundle.setPreLoadLargeImageUrl(hotelBigURL);            DisplayImageOptions.Builder builder = new DisplayImageOptions.Builder();            builder.cacheInMemory(true).cacheOnDisc(true).bitmapConfig(Bitmap.Config.RGB_565);            DisplayImageOptions options = builder.build();            ImageLoader.getInstance().loadImage(hotelBigURL, new ImageSize(DeviceUtil.getWindowWidth(), DeviceUtil.getWindowWidth()), options, new ImageLoadingListener() {                @Override                public void onLoadingStarted(String s, View view) {}                @Override                public void onLoadingFailed(String s, View view, FailReason failReason){}                @Override                public void onLoadingComplete(String s, View view, Bitmap bitmap){}                @Override                public void onLoadingCancelled(String s, View view) {}            });        }

将大图的url 按照手机的屏幕的宽和高作为key 提前存储在ImageLoader 中

在展示的时候,从缓存中拿,

    public static void showDynamicImageView(final ImageView imageView, final String imageUrl, final int id) {        try {            if (imageView == null) {                return;            }            ImageSize dynamicImageSize = new ImageSize(DeviceUtil.getWindowWidth(), DeviceUtil.getWindowWidth());            Bitmap hotelSloganBt = HotelUtils.getHotelBitmapFromCache(imageUrl, dynamicImageSize);            if (hotelSloganBt != null) {                imageView.setVisibility(View.VISIBLE);                imageView.setImageBitmap(hotelSloganBt);            }        } catch (Exception e) {            e.printStackTrace();        }    }

这里面的

Bitmap hotelSloganBt = HotelUtils.getHotelBitmapFromCache(imageUrl, dynamicImageSize);

是从ImageLoader 中拿取;

 public static Bitmap getHotelBitmapFromCache(String imageUrl, ImageSize imageSize) {        if (TextUtils.isEmpty(imageUrl)) {            return null;        }        String memoryCacheKey = MemoryCacheUtils.generateKey(imageUrl, imageSize);        List<Bitmap> memBp = MemoryCacheUtils.findCachedBitmapsForImageUri(memoryCacheKey, ImageLoader.getInstance().getMemoryCache());        if (memBp != null && memBp.size() > 0) {            Bitmap bitmap = memBp.get(0);            if (bitmap != null && !bitmap.isRecycled()) {                return bitmap;            } else {                File f = DiskCacheUtils.findInCache(imageUrl, ImageLoader.getInstance().getDiscCache());                if (f == null) return null;                return BitmapFactory.decodeFile(f.getAbsolutePath());            }        }        return null;    }

基本思想是,当缓存起来了,直接从缓存中获取

原创粉丝点击