Android 性能优化

一、ANR(Application not responding)程序无响应

主要原因:

1. 主线程做耗时操作超过5s

2. Service做耗时操作超过20s(Service默认执行在主线程,可以使用IntentService)

3. BroadcastReceiver中做耗时操作超过10s

解决办法:

开启子线程来处理

 

二、 内存溢出(Out of Memory)

主要原因: 

1. 加载大图

解决办法:

1. Bitmap对象及时recycle

2. 图片压缩

3. 图片缓存

 

三、内存泄漏

无用对象持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费称为内存泄漏

主要原因:

1. 单例模式导致的内存泄漏

通常情况下单例模式会使用到Context参数,如果此时外部传入的Context是Activity,该单例就会持有Activity的强引用,这样的话即使该Activity退出,该Activity也不会被回收,这样就造成了内存泄漏

解决办法:使用ApplicatonContext

2. 内部类导致内存泄漏

非静态内部类持有外部类的引用会导致内部类的生命周期过长。

解决办法:修改成静态内部类。

3. Handler引起的内存泄漏

解决办法:使用静态内部类 + WeakReference

4. BroadcastReceiver等未取消注册引起的内存泄漏

5. 属性动画在activity销毁时没有cancel引起的内存泄漏

6. 资源未关闭或释放引起的内存泄漏

7. WebView没有移除或销毁引起的内存泄漏

 

四、内存抖动

内存抖动是指内存在短时间内频繁地分配和回收,而频繁的gc会导致卡顿,严重时和内存泄漏一样会导致OOM。

常见的内存抖动场景:

1. 循环中创建大量临时对象;

2. onDraw中创建Paint或Bitmap对象等;

 

五、UI卡顿

主要原因:

1. UI线程做耗时操作

2. Layout布局过于复杂,无法在16ms内完成渲染

3. View过度绘制,导致某些像素在同一时间内被绘制多次,从而导致cpu,gpu负载过重。

解决办法:

1. 优化布局,使用include、merge、ViewStub

 

六、内存优化

优化方法:

1. 无用资源及时释放

2. 避免滥用Bitmap

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值