zoukankan      html  css  js  c++  java
  • drawable内存管理

    图片对象: 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中得到,这也是为效率考虑。但这样做也造成了用过的资源都会在内存中

  • 相关阅读:
    nginx限制某个IP同一时间段的访问次数
    在64位机器上使用yum install特定指定安装32位的库
    pl sql developer连接oracle数据库提示:ORA12541: TNS: no listener
    [转]Eclipse中几种加入包方式的区别
    Oracle安装出现Can't connect to X11 window
    [转]ORACLE10GR2,dbca时ora27125错误解决方法
    [转]教你如何进入google国际版 不跳转g.cn 及 opendns
    安装oracle遇到的故障
    [转]宝文!Apple Push Notification Service (APNS)原理与实现方案
    [转]关于安卓与ios的推送系统,我说说自己的看法。
  • 原文地址:https://www.cnblogs.com/tozhjj/p/7205955.html
Copyright © 2011-2022 走看看