• android 图片内存管理


    图片对象: drawable bitmap etc.
    图片对象在Android上该缓存吗?什么时候缓存?怎么缓存?缓存后使用时怎么取出?怎么销毁?什么时候销毁?
    bitmap对象(new出来的) :需要回收吗? 什么时候回收? 放入view中的bitmap对象需要回收吗?
    imageview 加载网络图片时,怎样设置加载中及加载失败后的图片?
    若事先设置backgroud/src ,当加载网络图片失败后 imageview 为空?

    if (imgView.getDrawable() == null) { //获取的是 src
    Toast.makeText(getActivity(), 图片加载失败, Toast.LENGTH_SHORT).show();
    imgView.setImageDrawable(getResources().getDrawable(R.drawable.icon));
    }

    从网络加载的图片的缓存 销毁 等等.
    OOM 内存溢出 内存heap size限制
    内存怎么计算? 图片大小
    图片三级缓存: 网络、内存、本地 LruCache

    当一个activity奔溃后 自动返回上一个activity 后从新加载资源?

    // 获取到可用内存的最大值,使用内存超出这个值会引起OutOfMemory异常。
    // LruCache通过构造函数传入缓存值,以KB为单位。
    int maxMemory = (int) Runtime.getRuntime().maxMemory() / 1024 ; //获取分配内存
    int cacheSize = maxMemory / 8; //缓存大小
    private LruCache<String, Bitmap> mMemoryCache = new LruCache<String, Bitmap>(cacheSize){
    protected int sizeOf(String key, Bitmap bitmap){
    // 重写此方法来衡量每张图片的大小,默认返回图片数量。
    return bitmap.getByteCount() / 1024;
    }
    };

    background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸
    scaleType只对src起作用;bg可设置透明度
    setImageResource与xml中的src的属性相匹配, 而setBackgroundResource与xml中background对应

    Bitmap真正的位图数据是在ndk中用c写的,所以用setCallback是不能销毁位图数据的,应该调用Bitmap的recycle()来清理内存。


    需要手动释放的bitmap图像通常都是不放入控件中的bitmap,
    也就是说没有其他的对象对该bitmap继续保持引用了,此时调用recycle手动释放bitmap资源。

    若一个drawable,bitmap做为图片资源放入程序的view(例如做为ImageView的resource)中,
    那么此时不需要手动释放资源了,系统会在该view销毁时帮你释放掉该资源的。
    特殊情况是,一个对象不能被释放是因为这个对象被其他的对象所引用,导致系统不敢回收,
    例如声明了一个static Drawable对象,并且绑定了资源图片。此时如果我们想最大利用内存,
    尽量减少过期或者临时不需要的对象在内存中迟迟不能被回收,
    这时我们就考虑用drawable.setCallback(null)来消除这个drawable的引用。
    但是尽量不要这样使用static Drawable,如果忘记回收,极易造成内存泄漏!

    android对于直接通过资源id载入的资源其实是做了cache的了,
    这样下次再需要此资源的时候直接从cache中得到,这也是为效率考虑。但这样做也造成了用过的资源都会在内存中

  • 相关阅读:
    数据仓库与数据挖掘的一些基本概念
    System.currentTimeMillis();
    html练习(3)
    HDU 1556 Color the ball【算法的优化】
    ubuntu12.04 安装配置jdk1.7
    java中的switch用String作为条件
    oracle中 connect by prior 递归算法
    C#复习题
    AngularJS:Http
    AngularJS:Service
  • 原文地址:https://www.cnblogs.com/tozhjj/p/7132582.html
Copyright © 2020-2023  润新知