当前位置: 代码迷 >> Android >> [android_gallery_4.0]gallery给养,加载图片机制
  详细解决方案

[android_gallery_4.0]gallery给养,加载图片机制

热度:23   发布时间:2016-05-01 11:11:46.0
[android_gallery_4.0]gallery补充,加载图片机制

9)PhotoDataAdapter处理下的图片加载机制

简单说,可以分为缓存机制以及线程池机制。两个机制都有助于提高加载速度。

这里有一个32个元素的数据索引区存放当前图片周围的图片item,声明见下。

    private final MediaItem mData[] = newMediaItem[DATA_CACHE_SIZE];

    private int mContentStart= 0;

    private int mContentEnd= 0;

她的范围用是介乎mContentStart与mContentEnd之间。

这个索引区主要起到定位获取到图片信息的作用。该数据索引区与接下来的缓存区有关。并且该内容会随着切换显示不同图片而变化,具体变化跟mContentStart与mContentEnd有关,相关代码还看不明白。

缓存区存放五个图片元素,如前面所说,图片元素可以是完整画面显示的图片,位于图片下方的缩略图图片,可能出现的GIF图片。

这里存放的其实确切不是图片元素,可以从存放的ImageCache定义可知,

privateHashMap<Long, ImageEntry> mImageCache = new HashMap<Long,ImageEntry>();

    private int mActiveStart = 0;

private int mActiveEnd = 0;

 

而imageentry存放有各种线程task,这个task负责着相应图片元素的生成。而这些task均由下面提到的线程池进行启动。

线程池最多能存放8个任务,同时能执行4个。这些任务,或者是生成缩略图,或者是生成大图片,或者是gif解码。优先级先后顺序也是按此顺序。个人认为,gif解码耗时最长,生成缩略图耗时最短,一般优先解决简单问题。

随着用户手势滑动图片,缓存区都在滚动变化,犹如一个滑动窗口,滑动窗口外的数据都不理会先,只理会窗口内的数据先得到处理。

如此即是缓存机制与线程池机制。

  相关解决方案