Android进阶之性能优化

为什么别人的app那么的流畅、稳定?为什么我们的app在底端机上常常卡顿或者是更惨的OOM、闪退?

答案是:2016体验才是王道,所以我们不能再一味的追求进度与新功能了而忘记了性能!!!

一、内存优化

做内存优化我们首先就得明白什么是内存溢出、什么是内存泄漏。
内存溢出:简单是说就是运行需要的内存超出了机器提供的内存,系统为了保证正常运行不得不强行关闭软件来释放内存。
内存泄漏:通俗的说就是该被回收的对象还被其他的对象引用着,导致GC时没有被回收掉,这样随着应用的运行时间越长,他们就一直占着内存内存越来越大也就导致了程序崩溃。

那么问题来了,我们在实际开发中应该怎么做呢?

1、避免无效的对象、变量,减少内存的使用;
2、单例是使用也是对内存控制的很好实现;
3、严格按照Google的注册与反注册原理来,对Receiver、Sensor、File、Cursor(注意:Cursor的管理,看情况使用,Cursor的开启十分的耗时,可以通过Cursor.require来刷新 )、Stream的开关进行操作;
4、特别注意Context的使用,尽量使用ApplicationContext来避免内存溢出;
5、如果出现内存泄漏我们可以使用暴力而简单的工具来解决,推荐一篇文章 LeakCanary:让内存泄漏无所遁形
6、Bitmap使用:
a、加载相应的图片,缩略图和大图分开,这很重要;
b、使用BitmapFactory.Options设置inSampleSize就可以缩小图片(Options.inJustDecodeBounds=true可以在不把图片读入内存的同时获得图片的尺寸,在通过inSampleSize来获取需要的大小);
c、缓存机制,这个就需要很深的功底了,推荐使用开源框架如:Picasso、Universal-ImageLoader、Fresco,这些都对图片做了很好的优化,相信大家一定不陌生;

二、布局优化

核心思想:减少布局的绘画时间。

1、ViewGroup选择;
能用LinearLayout的就别用RelativeLayout,虽然RelativeLayout很强大,不过它付出了性能的代价;
2、include、merge、viewstub的使用;
可能刚开始接触Android的小伙伴很少使用这三个家伙,不过他们真的很不错,include布局重用、merge降低层级关系、viewstub按需加载,这些百度一下一大堆的;
3、绘制优化;
为了保持界面的流畅性,那么我们就得有流畅的帧率,Android索性就把达到这种流畅的帧率规定为60fps(1000/60 = 16.67ms/帧), 所以在16ms内没有把这一帧的任务完成,就会出现丢帧的情况,尽量保证每次在16ms内处理完所有的CPU与GPU计算、绘制、渲染等操作,否则会造成丢帧卡顿问题。为了避免出现卡顿我们需要做的是:
a、不要在View的onDraw方法中进行耗时的逻辑;
b、减少不必的局部对象以及图片和背景,防止内存抖动造成的卡顿;

三、网络优化

1、网络请求方式;
GET:应当用来请求返回结果,参数是作为url的一部分;
POST:用于请求会更改服务端数据或状态;
HEAD:与服务器约定只需要返回头信息;
PUT:用于将网页放置正确的地方;
DELETE请求用于删除服务器指定文档;
网络操作是十分的复杂,自己开发费时费力还不一定好用,还是推荐使用开源的一些项目:okhttp、xUtils、Volley等;
2、数据解析;
JSON:通常我们会使用GJSON、Jackson;
XML:常用的有三种DOM、SAX、PULL(推荐使用后面两种,详情移步: XML总结);

四、一些Tips

1、将Activity的Window背景设置为空。getWindow().setBackGroundDrawable(null);
2、文件操作的速度比数据库快10倍(针对存储文件大小与文件存储page分配大小相近时,如一张图片的存储);
3、如果方法用不到成员变量,那么把写成static,性能会提高很多;
4、慎用浮点数,它很慢;
5、尽量避免使用枚举;
6、少用setter/getter虽然他很方便,但是在当前类中使用public会好很多;
7、常量应该使用static final;
8、能用增强for循环就用,但是记住,它的方法内不能对集合本事操作;
9、listview是优化:
a、背景色与cacheColorHint设置相同,绘制时更快;
b、viewHolder使用,不好RecycleView已经强制使用了;
c、尽量减少item布局的层级;
d、减速没有必要的加载(按需加载);

友情提醒:以上为个人观点,仅供参考!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值