引用类型:
1.强引用( strong reference):
String aHelloString=“hello”;
只要引用存在就不会被回收

2.java提供其他三种引用类型
软引用(SoftReference)
虚引用(WeakReference)
phantom references (java.lang.ref.PhantomReference)

3.主要介绍SoftReference
主要特点是具有较强的引用功能。只有当内存不够的时候才回收这类内存,因此在内存足够的时候,他们通常不被回收。另外,这些引用对象还能保证在Java 抛出OutOfMemory异常之前,被设置为null。他可以用于实现一些常用资源的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory异常。
使用示例:
A obj = new A();
SoftRefenrence sr = new SoftReference(obj);

引用时
if(sr!=null){
obj = sr.get();
}else{
obj = new A();
sr = new SoftReference(obj);
}

主要说明在Android里的用处:
在有需要缓存的地方。
在android编程中,特别是在listview用来显示来自网络的图片或者加载缩略图等需要异步加载的资源时,往往需要一个优化的机制。第一是异步加载。第二则是既要考虑到手机的内存问题,又要考虑到网络下载的问题,就是当你下载了一张图片,然后显示在listview的一个view上,然后执行往下拉又往回拉这个动作时,那么我们是否重新去下载该图片呢?好处是节省内存,你每次就存着显示在界面上的那几幅图,但是坏处是每次更新都要重新下载图片。所以我们需要一个缓存的机制,当只有图片的url(即图片的引用)不存在缓存中时才去下载。当然,当内存告急时,需要释放一些没引用的图片,这样,SoftReference就可以很大的用武之地了。即将下载下来的图片或者取出来的缩略图放在SoftReference中,然后用map,用Key=img_url来存储该软连接。

实际使用场景:
FileBrowser中的缩略图加载。
//pseudocode
private final static ConcurrentHashMap<String, SoftReference<Bitmap>> softBitmapCache;
private Bitmap getBitmap(String fileName) {
// First try the hard reference cache
SoftReference<Bitmap> bitmapReference = softBitmapCache.get(fileName);
if (bitmapReference != null) {
final Bitmap bitmap = bitmapReference.get();
if (bitmap != null) {
// Bitmap found in soft cache
return bitmap;
} else {
//then get from sdcard
bitmap = getFromSDCard(fileName);
softBitmapCache.put(fileName, new SoftReference<Bitmap>(bitmap));
return bitmap;
}
}
}

更多相关文章

  1. 图片加载框架简单介绍 ImageLoader 的基本使用
  2. Android(安卓)Intent 总结
  3. android ImageButton显示本地图片
  4. android 游戏开发过程中让图片自适应
  5. Android(安卓)首页轮播图实现
  6. 缓存统一管理工具类--android
  7. Android获取系统储存以及内存信息的方法(二)
  8. android 高效显示Bitmap - 开发文档翻译
  9. Android(安卓)系统信息获取(CPU,RAM,ROM,Battery,SD-card,版本等)

随机推荐

  1. 2011.09.26(4)——— android sample之Note
  2. Android 2.1 源码结构分析
  3. 什么是Android内核
  4. Android之从Browser中打开本地的应用程序
  5. 在Flutter启动Android的后台服务
  6. Android 开发问题集合
  7. android-map-key获取
  8. Android近百个项目的源代码
  9. Android之---Android Studio开发最NB(牛逼
  10. 使用多状态按钮ToggleButton