zoukankan      html  css  js  c++  java
  • 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中得到,这也是为效率考虑。但这样做也造成了用过的资源都会在内存中

  • 相关阅读:
    iOS (封装)一句话调用系统的alertView和alertController
    仿写从iOS8开始支持的UIAlertController:BGAAlertController-Android
    iOS开发之UIAlertController的适配
    使用dispatch_once实现单例
    关于内存警告
    Android之drawable state各个属性具体解释
    vijos 1115 火星人
    X-UA-Compatible IE 浏览器默认文档模式设置
    POJ--1300--Door Man【推断无向图欧拉通路】
    sharepoint 2013 附件控件FileUpload怎样检验是否为图片的方法
  • 原文地址:https://www.cnblogs.com/tozhjj/p/7132582.html
Copyright © 2011-2022 走看看