内存优化 从190M到5M

来源:互联网 发布:基因工程中数据分析 编辑:程序博客网 时间:2024/05/16 13:39

1.1注册没取消造成的内存泄露
1.2集合中对象没清理造成的内存泄露
2.1资源对象(Cursor,File文件等)没关闭造成的内存泄露
    close()再设置为null
3.1反复new以申请内存
3.2未及时并有效的释放内存
    3.2.1Bitmap调用recycle(),再设置为Null
    3.2.2构造Adapter时,没有使用缓存的convertView
4.1保存了多个耗用内存过大的对象(如Bitmap、typeFace...)
5.1static
    最常见的是mContext 当activity经历onDestory时由于任然有对象保存对其的引用所以此activity任就不会被释放,建议使用applicationContext




~~~~~~~~~~~~~接下来说一个4.1的例子~~~~~~~~~~~~~



使用工具发现自己的一个小程序占用内存达到190M

这样 当别的程序占用内存高一些的话 程序容易被系统杀死 更甚机子卡死或是自动重启


需求是:

可以浮在任何界面上,就像360加速球那样的存在 (WindowManager.addView)

炫酷的实时展示cpu、内存、存储的占用比(ObjectAnim动画、Thread中读文件),并没有加载图片

展示基本信息:如日期时间、网络连接状况有线无线信号强度、usb(监听各种广播:usb、net、time)


后来采用蠢办法 注释一块代码 运行一次 用Eclipse APT插件实时看

后来发现是因为7次加载了typeface .TTF文件

使用单例模式 保证程序只加载一次 优化了这个问题

代码如下

public class TypefaceUtils {
    
    public static Typeface wryh, led = null;
    
    private TypefaceUtils(Context context) {
        AssetManager assets = context.getAssets();
        wryh = Typeface.createFromAsset(assets, "fonts/wryh_ccf.ttf");
        led = Typeface.createFromAsset(assets, "fonts/led_ccf.ttf");
    }

    static TypefaceUtils instance = null;
    public static TypefaceUtils getInstance(Context context){
        if(instance == null){
            instance = new TypefaceUtils(context);
        }
        return instance;
    }



优化过后 占用变成了30M


其实一个ttf文件里几千个字符, 我的程序里只用到了不到15个字符

百度TTF编辑器 使用font creator工具把多余的字符都干掉了

替换到工程中····


这次优化后 从此占用在5M左右浮动

nice~~~TUT








0 0
原创粉丝点击