Android性能优化方法
gpu过度绘制
•打开开发者选型,“调试gpu过度绘制”,蓝、绿、粉红、红,过度绘制依次加深
•粉红色尽量优化,界面尽量保持蓝绿颜色
•红色肯定是有问题的,不能忍受
使用hierarchyview分析布局层级
•删除多个全屏背景:应用中不可见的背景,将其删除掉
•优化imageview:对于先绘制了一个背景,然后在其上绘制了图片的,9-patch格式的背景图中间拉伸部分设置为透明的,android 2d渲染引擎会优化9-patch图中的透明像素。这个简单的修改可以消除头像上的过度绘制。
•缩短view层级结构 •删除非必须view,不仅仅能提高帧率还能降低对内存的消耗、同时还能加速应用的启动
•textview组合图标,代替linearlayout+textview+imageview
•使用mearge标签
•使用relativelayout扁平化布局
•特别是listview item布局,一定要扁平化
不要吝啬发现android device monitor的功能
•start method profiling •可以观察每个线程的方法调用情况,
•可以通过观察,方法的调用次数、每次方法执行时间
•找到有是否死循环,是否为耗时操作
使用leakcanary发现内存溢出
•在开发阶段一定要集成leakcanary,而且非常容易集成
•及时发现activity页面内存溢出地方法
•详细的内存溢出方法跟踪,便于定位异常点
使用lint工具给apk包减肥
使用oneapm监控app性能
使用svg代替图片
•需要和设计配合
使用xml代替图片
代码规范制定并遵守
•一致的代码风格,有利于代码维护、查看和发现问题所在
下面在给大家分享android性能优化一些方法
1.采用硬件加速,在androidmanifest.xml中application添加 android:hardwareaccelerated=”true”。不过这个需要在android 3.0才可以使用。
2.view 中设置缓存属性.setdrawingcache为true。
3.优化你的布局。通过android sdk中tools目录下的layoutopt 命令查看你的布局是否需要优化。
4.动态加载view.采用viewstub 避免一些不经常的视图长期握住引用。
5.将acitivity 中的window 的背景图设置为空。getwindow().setbackgrounddrawable(null);android的默认背景是不是为空。
6.采用 优化布局层数。 采用来共享布局。
7.查看heap 的大小。
8.利用traceview查看跟踪函数调用。有的放矢的优化。
9.cursor 的使用。不过要注意管理好cursor,不要每次打开关闭cursor。因为打开关闭cursor非常耗时。cursor.require用于刷新cursor。
10.采用环形buffer(可以采用链表数据结构实现)。可以设置一个链表长度的上限,根据手势的变化来不断地更新环形buffer的内容。
11.采用surfaceview在子线程刷新ui, 避免手势的处理和绘制在同一ui线程(普通view都这样做)。
12.采用jni,将耗时间的处理放到c/c++层来处理。
13.有些能用文件操作的,尽量采用文件操作,文件操作的速度比数据库的操作要快10倍左右。
14.懒加载和缓存机制。访问网络的耗时操作启动一个新线程来做,而不要再ui线程来做。
15.消息缓存通过handler.obtainmessage复用之前的message。
16.文件io缓存,使用具有缓存策略的输入流,bufferedinputstream替代inputstream,bufferedreader替代 reader,bufferedreader替代bufferedinputstream.对文件、网络io皆适用。例如:
httpurlconnection con=(httpurlconnection)url.openconnection();bufferedreader input =newbufferedreader(new inputstreamreader(con.getinputstream()));
strings;
while((s = input.readline()) != null) {
}
17.layout优化:使用抽象布局标签(include,viewstub,merge)、去除不必要的嵌套和view节点、减少不必要的infalte及其他layout方面可调优点,顺带提及布局调优相关工具 (hierarchy viewer和lint)。
18.textview属性优化:textview的android:ellipsize=”marquee”跑马灯效果极耗性能。
19.使用hashmap代替arraylist,时间复杂度降低一个数量级。