Android内存优化

1,系统输入法引起的内存泄漏。


使用LeakCanary工具定位内存问题时候,发现系统输入法的内存泄漏,网上也有挺多解决方案,如下这篇算是比较好的几种方案的集合。

在项目中,通过阅读源码,最终采用了一种文章没提到的方案,暂时未发现有什么问题,纪录下,方便后续查阅。 
在 activity 的 onDestroy 方法中加入如下代码即可。

//Fix memory leak: http://code.google.com/p/android/issues/detail?id=34731
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        try {
            InputMethodManager.class.getDeclaredMethod("windowDismissed", IBinder.class).invoke(imm,
                    getWindow().getDecorView().getWindowToken());
        } catch (Exception e){
            e.printStackTrace();
        } 

二,其他引起内存泄漏的

1、Handler持有的引用最好使用弱引用,在Activity被释放的时候要记得清空Message,取消Handler对象的Runnable;
2、非静态内部类、非静态匿名内部类会自动持有外部类的引用,为避免内存泄露,可以考虑把内部类声明为静态的;
3、对于生命周期比Activity长的对象,要避免直接引用Activity的context,可以考虑使用ApplicationContext
4、广播接收器、EventBus等的使用过程中,注册/反注册应该成对使用;
5、不再使用的资源对象Cursor、File、Bitmap等要记住正确关闭;
6、集合里面的东西、有加入就应该对应有相应的删除。

详细请参考:http://www.cnblogs.com/andashu/p/6440944.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值