Android 的几个性能优化

1内存优化
使用的分析工具: Memory Monitor 工具(Android studio自带)
1.集合类泄漏
如果一个集合是全局性变量(比如类中的静态变量或全局性map即有静态引用又或者final指向它)只有添加元素的方法,而没有清除的机制,就会一直占用内存,造成内存泄漏。
2.单例使用context尽量使用Application.如果使用Activity就会造成这个Activity引用被这个单例所持有,从而造成无法回收这个Activity.
3.非静态内部类创建静态实例。
非静态内部类默认会持有外部类的引用,由于静态实例的生命周期和应用一样长,导致外部类无法被回收。正确做法是:将该内部类设为静态内部类或将该内部类抽取出来封装成一个单例。
4.匿名内部类线程异步导致泄漏
匿名内部类会又外部类的应用,此时将匿名内部类传入一个异步线程,此线程和Activity生命周期不一致时,就造成了Activity的泄漏。
5.handler造成的内存泄漏
handler、message、messageQueue都是互相关联在一起的,如果handler发送的message尚未被处理,则该message及发送它的handler对象被线程messageQueue一直持有而造成内存泄漏。可以在Activity销毁的时候清空消息。
6.尽量避免使用static成员变量
这部分内存一直不会被释放
7.AsyncTask对象造成的泄漏
AsyncTask和Activity不一定一致,解决方法是:在Activity终止的时候,终止AsyncTask中的后台任务。调用cancel()方法不一定靠谱,需要在doInBackground()方法中判断iscancel()状态。及时退出。
8.BitMap对象造成的泄漏
Bitmap对象不用的时候最好调用recycle方法再赋值为null,


2.App交互优化
无法在16ms内完成渲染,就会引起掉帧。两个根本原因是:
1.绘制任务太重,绘制一帧内容耗时太长。
2.主线程太忙,根据系统传递过来的VSYNC信号来时还没有准备好数据导致丢帧。

优化方法:
1.布局优化,google其ApI文档中建议View高度不宜超过10层
布局复用,<include>重用layout
提高显示速度,使用<ViewStub>延时Viwe加载;
减少层级:使用<merge> 标签替换父级布局
使用wrap_content,会增加measure计算成本
删除控件的无用属性

merge:它会删除多余的层级
viewstub:当你需要这个布局时才会加载
2 绘制优化:
· 1.移除多余的背景,移除window默认图片,按需显示背景
2.自定义View优化,使用canvas.clipRect()来识别那些区域时可见的,只有在这个区 域才绘制。
APK瘦身:
代码混淆。使用proGuard 代码混淆器工具,它包括压缩、优化、混淆等功能。
资源优化。比如使用 Android Lint 删除冗余资源,资源文件最少化等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值