Android 性能优化

   

       我们在开发APP时,由于设备性能的限制和用户体验的要求,我们必须在开发过程中考虑性能问题。从三个方面来谈下:响应时间、内存、电量。

     1 响应时间

        响应步骤可以分为:用户操作-逻辑处理-网络交互-页面展示。

        逻辑处理:

                       清理程序逻辑,减少不必要的操作,不分配不必要的内存。

                        1)不要在for循环中声明临时变量和写try-catch。

                        2)合适使用数据类型,比如:StringBuilder或StringBuffer、少用enum、少用父类声明(list、map)

                        3) 如果需要频繁的new Theard,使用线程池。

                        4) 正确使用单例模式

                        5)多用常量

                        6)使用策略模式进行解耦

        网络交互:使用缓存  1)使用线程池     2)图片缓存   3)消息缓存,使用obtainMessage实现消息复用         4)listVIew缓存     5)网络缓存    6)layout缓存

                         控制最大请求量,及时取消请求,过滤重复的请求,设置超时,设置优先级。

        页面展示:使用hierarchy viewer 和 lint 分析布局

                          1) 尽可能的减少布局层次, 使用<includ>、<viewstub>、<merge>。  UI绘制流程:measure - layout - draw;measure和layout都需要循环所有的子控件。所以子控件越多,消耗时间越长。

                          2)ViewPager  同时缓存pager数最好为最小数3,过多就会卡。 每个pager在使用时再加载网络和数据库的数据,不要预加载。

                          3) 使用RelativeLayout 代替 LinearLayout

                          4)避免过度绘制(OverDraw)

                          5) 尽可能为所有分辨率准备资源,减少硬件缩放,加快UI绘制速度

                          6) 使用lrucache 和disklrucache;使用网络+数据库,每个activity和fragment设置一个最小请求时间间隔。

    2 内存

                traceview 分析性能

                1)  bitmap消耗内存,在图片比较大的时候,容易产生OOM,需要使用BitMapFactory.options缩放。使用完之后,及时使用BitMap.recycle()及时回收。

    3 电量

           电量消耗分为两部分:绘制图片、摆放布局;上报数据、定位、定时检索后台数据。

           措施:1)减少唤醒屏幕的次数和时间,使用wakelock时正确执行唤醒操作并根据设定关闭操作。

                      2)非必须马上执行的操作,可以等到充电或电量足的时候进行。如:文件上传、图片处理。

                      3)将多次网络请求打包为一次,可以避免过多次的网络请求产生的电量消耗。

相关推荐