Android 性能优化记录一

之前的项目时间紧张,开发完一个模块之后就接着开发下一个。现在有空闲时间进行整理与总结,有不对的地方还请路过大神指正~


图片相关

为了防止内存OOM,在展示高分辨率图片的时候,最好先将图片进行压缩。为了避免OOM异常,解析图片的时候都先检查图片的大小,保证这些图片都不会超出你程序的可用内存。加载图片时,为了更好的用户体验,可以先用内存或硬盘缓存即将显示的图片,在进行网络请求前需判断缓存中是否有该图片,没有就下载。另外,还要考虑用户的网络状态是否是移动数据,还是WiFi情况(用户体验)。


内存溢出

个人碰到最多的oom是Handler,图片与单例模式所造成的。
由于Handler变量的生命周期和Activity是不一致,所以很容易导致无法正确释放。解决方案:Handler的持有的引用对象最好使用弱引用,资源释放时也可以清空 Handler 里面的消息。比如在 Activity onStop 或者 onDestroy 的时候,取消掉该 Handler 对象的 Message和 Runnable。
图片主要是控件显示高分辨率的图片而没有进行压缩。
而单例的静态特性也很容易造成内存泄漏(其生命周期与应用的生命周期一样长)。传入的是 Activity 的 Context,当这个 Context 所对应的 Activity 退出时,由于该Context 的引用被单例对象所持有,其生命周期等于整个应用程序的生命周期,所以当前 Activity退出时它的内存并不会被回收,这就造成泄漏了。
总结:在Activoty中避免使用非静态内部类,则其存活期跟 Activity 的生命周期就无关了

优化
强引用,软引用,弱引用 的相关调用

Java 如何有效地避免OOM:善于利用软引用和弱引用 
Java引用总结–StrongReference、SoftReference、WeakReference、PhantomReference 
Java 7之基础 - 强引用、弱引用、软引用、虚引用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值