《Android开发艺术探索》第十二章Bitmap加载和Cache小结
2016-12-08 10:20
447 查看
1. Bitmap的高效加载
1)BitmapFactory提供了decodeFile(decodeFileDescriptor),decodeResource,decodeStream和decodeByteArray分别用于从文件、资源、输入流以及字节数组中加载Bitmap对象;
2)修改BitmapFactory.Options的inSampleSize采样率来加载所需尺寸的图片;将BitmapFactory.Options的inJustDecodeBounds设置为true并加载图片,取出原始宽高outWidth和outHeight,计算出采样率,再把inJustDecodeBounds设置为false加载图片;
3)缓存策略:当应用打算从网络请求图片时,首先从内存中获取,如果内存中没有则从存储设备中获取,还没有再从网络上下载,从网上下载后先保存到本地缓存中,然后从本地缓存读取图片,读取的同时保存到内存缓存中,然后再显示;
4)强引用是直接的引用,当一个对象只有软引用时系统内存不足会被gc掉,只有弱引用时会随时被gc;
5)LruCache,get(key), put(key, bitmap), remove(key)
int cacheSize = (int)(Runtime.getRuntime().maxMemory() / 1024);
new LruCache<String, Bitmap>(cacheSize) {
protected int sizeOf(String key, Bitmap bitmap){
return bitmap.getRowBytes() * bitmap.getHeight() / 1024;
}
}
6)static DiskLruCache open(File dir, int appVersion, valueCount, long maxSize)
第一个参数指/sdcard/Android/data/package_name/cache目录,当应用被卸载后此目录会一并删除,如果希望卸载后保留缓存就要选择SD卡上的其它目录;
第二个参数表示版本号,一般为1,变更后会导致所有缓存被清空;
第三个参数表示节点对应的数据个数,一般为1;
第四个参数表示缓存大小。
File diskCacheDir = getDiskCacheDir(mContext, "bitmap");
if(!diskCacheDir.exists()) {
diskCacheDir.mkdirs();
}
mDiskLruCache = DiskLruCache.open(diskCacheDir, 1, 1, DISK_CACHE_SIZE);
7)ImageLoader应具有的功能:同步异步加载、内存和硬盘缓存、网络加载、图片压缩
8)使用线程池来实现图片下载任务的添加,ImageView的tag中保存下载的url地址,与下载完的图片进行比对,如果相同才显示,避免View缓存导致图片显示错乱;
9)优化列表卡顿:在getView中异步加载Image,在列表滑动的时候停止加载图片,开启硬件加速;
1)BitmapFactory提供了decodeFile(decodeFileDescriptor),decodeResource,decodeStream和decodeByteArray分别用于从文件、资源、输入流以及字节数组中加载Bitmap对象;
2)修改BitmapFactory.Options的inSampleSize采样率来加载所需尺寸的图片;将BitmapFactory.Options的inJustDecodeBounds设置为true并加载图片,取出原始宽高outWidth和outHeight,计算出采样率,再把inJustDecodeBounds设置为false加载图片;
3)缓存策略:当应用打算从网络请求图片时,首先从内存中获取,如果内存中没有则从存储设备中获取,还没有再从网络上下载,从网上下载后先保存到本地缓存中,然后从本地缓存读取图片,读取的同时保存到内存缓存中,然后再显示;
4)强引用是直接的引用,当一个对象只有软引用时系统内存不足会被gc掉,只有弱引用时会随时被gc;
5)LruCache,get(key), put(key, bitmap), remove(key)
int cacheSize = (int)(Runtime.getRuntime().maxMemory() / 1024);
new LruCache<String, Bitmap>(cacheSize) {
protected int sizeOf(String key, Bitmap bitmap){
return bitmap.getRowBytes() * bitmap.getHeight() / 1024;
}
}
6)static DiskLruCache open(File dir, int appVersion, valueCount, long maxSize)
第一个参数指/sdcard/Android/data/package_name/cache目录,当应用被卸载后此目录会一并删除,如果希望卸载后保留缓存就要选择SD卡上的其它目录;
第二个参数表示版本号,一般为1,变更后会导致所有缓存被清空;
第三个参数表示节点对应的数据个数,一般为1;
第四个参数表示缓存大小。
File diskCacheDir = getDiskCacheDir(mContext, "bitmap");
if(!diskCacheDir.exists()) {
diskCacheDir.mkdirs();
}
mDiskLruCache = DiskLruCache.open(diskCacheDir, 1, 1, DISK_CACHE_SIZE);
7)ImageLoader应具有的功能:同步异步加载、内存和硬盘缓存、网络加载、图片压缩
8)使用线程池来实现图片下载任务的添加,ImageView的tag中保存下载的url地址,与下载完的图片进行比对,如果相同才显示,避免View缓存导致图片显示错乱;
9)优化列表卡顿:在getView中异步加载Image,在列表滑动的时候停止加载图片,开启硬件加速;
相关文章推荐
- 《android开发艺术探索》读书笔记(十二)--Bitmap的加载和Cache
- 《Android开发艺术探索》12章 Bitmap的加载和Cache
- 《android开发艺术探索》笔记之Bitmap的加载和Cache
- 第十二章 Bitmap的加载和Cache
- 《Android开发艺术探索》笔记——Bitmap的加载和Cache(二)
- 《Android 开发艺术探索》随手笔记——第十二章Bitmap的加载和Cache
- 第十二章 、Bitmap的加载和Cache
- 《android开发艺术探索》笔记之Bitmap的加载和Cache
- Android开发艺术探索》读书笔记 (12) 第12章 Bitmap的加载和Cache
- 《Android开发艺术探索》笔记——Bitmap的加载和Cache(一)
- 《Android开发艺术探索》笔记——Bitmap的加载和Cache(三)
- Bitmap的加载和Cache
- Bitmap的加载和Cache
- Android——Bitmap的加载和Cache
- Bitmap的加载和Cache
- Bitmap的加载和Cache
- Bitmap高效加载、Cache和优化(一)
- Android线程池及Bitmap加载和Cache
- Bitmap的加载和Cache(存储)
- Bitmap高效加载、Cache和优化(二)