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

    1.Activity中的对象生命周期勿大于Activity的生命周期。OOM演示样例代码例如以下:

              private static Drawable sBackground;        
                 @Override   
                protected void onCreate(Bundle state) {    
                       super.onCreate(state);          
                       TextView label = new TextView(this);      
                       label.setText("Leaks are bad");          
                       if (sBackground == null) {      
                       sBackground = getDrawable(R.drawable.large_bitmap);    
                       }     
    	   //sBackground持有对label的引用。label又持有对this的引
                label.setBackgroundDrawable(sBackground);
                setContentView(label)
    }
    

    2.生命周期长的内部类使用静态内部类;

    过去经常使用的内存缓存实现是通过SoftReference或WeakReference(当内存空间不足时。此cache中的bitmap会被垃圾回收掉),但不建议这样做。从Android2.3(API等级9)垃圾收集器開始更积极收集软/弱引用,这使得它们缓存周期非常短且不可靠;

    在Android 3.0(API等级11)之前,存储在native内存中的可见的bitmap不会被释放,可能会导致应用程序临时地超过其内存限制并崩溃;

    3.LruCache类非常适合做图片缓存,它通过LinkedHashMap保持图片的强引用方式存储图片,当缓存空间超过设置定的限值时会释放掉早期的缓存,演示样例參考例如以下:

    private final HashMap<String, Bitmap>mHardBitmapCache = new LinkedHashMap<String, Bitmap>(HARD_CACHE_CAPACITY/ 2, 0.75f, true) { 
            @Override 
          protected boolean removeEldestEntry(LinkedHashMap.Entry<String, Bitmap> eldest) { 
                if (size() >HARD_CACHE_CAPACITY) { 
                   //当map的size大于30时。把近期不经常使用的key放到mSoftBitmapCache中,从而保证mHardBitmapCache的效率
                   mSoftBitmapCache.put(eldest.getKey(), newSoftReference<Bitmap>(eldest.getValue())); 
                   return true; 
                } else 
                    return false; 
            } 
        };

    4.强引用已经提供了LRU算法(LruCache 类即採取LRU算法实现的缓存策略),能够移除最不经常使用的图片对象;

    5.假设我们粗暴的把ThreadLocal设置null,而不调用remove()方法或set(null),那么就可能造成ThreadLocal绑定的对象长期也不能被回收。因而产出内存泄露。

  • 相关阅读:
    AWR介绍使用
    hint使用
    部分索引类型介绍\索引重建否\索引压缩
    生成Oracle Statpack步骤
    自治事务
    append与nologging的使用
    聚簇表
    C语言杂谈——静态函数
    Qt之对话框设计——可扩展对话框
    C语言杂谈——指针篇
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8505961.html
Copyright © 2011-2022 走看看