个人总结笔记——Android开发过程中有益于app优化的一些处理

(一)使用动画的时候:

1、OOM问题

    当使用帧动画的时候,需要考虑到这个问题。当图片数量较多、较大的时候,就很可能会出现OOM。所以还是尽量避免使用帧动画。

2、内存泄漏

    在使用属性动画的时候,有一类无限循环的动画,这类动画建议在Activity销毁的时候及时停止动画,否则会导致activity无法释放,从而导致内存泄漏。

3、硬件加速器

    使用动画的时候,建议开启硬件加速器,这样会一定程度上提高动画的流畅度。

4、在使用补间动画的时候,并不是真正的改变了view的状态,所以有时候会出现动画完成后无法隐藏view,也就是说setVisibility(View.GONE)无效,这个时候需要调用view.clearAnimation()清除view动画,即可解决问题。

(二)开发过程中关于单位的使用

    尽量不要使用px,使用px会导致在不同的设备上有不同的效果。建议设置字号的时候使用sp,其他都使用dp。

    当你在代码中动态设置的时候,参数都是px的,所以需要将dp转换为px后在设置。这里Android有自带的API ,TypeValue可以进行单位转换。具体怎么使用,点进去查看下源码就知道了。

(三) 在实现列表里加载大量图片的时候一些优化措施

    在ListView、RecyclerView等列表中加载大量图片的时候有一下建议:

    1、分页加载数据

    2、实现Item复用

    3、item复用后有可能导致错位,可以通过imgView.setTag(url)的方式将url绑定到图片控件上,然后下载图的时候,url从tag里获取。

    4、监听列表的滑动事件OnScrollListener,在滑动事件onScrollStateChanged方法里判断,当列表处于滑动状态的时候,不加载图片,当停止滑动才加载图片,同时更新标志位状态。在getView方法里就根据标识位来判断是否进行图片加载。(注意:getView里不要执行好事操作,否则页面卡顿。开子线程异步执行)

    5、图片二级缓存

        第一次从网络加载图片之后,将图片缓存到存储设备设备上,同时在内存中再缓存一份。下一次先从内存中获取图片,内存里没有,再从存储设备(SD卡)上获取,存储设备上也没有,再从网络获取。此处涉及到当存储容量紧张的时候,如何来清楚缓存从而腾出空间供新内容的缓存。这个可以使用LRU缓存算法来实现。

    6、在某些特殊情况下列表还是卡顿现象,可以借助硬件加速器来解决。在清单文件中给activity加如下设置

android:hardwareAccelerated="true"

(四)布局优化

        1、可以复用的控件使用标签

        2、相同布局方式嵌套层次多的时候,使用标签

        3、当一些控件的显示是在运行的时候才决定的,可以使用标签来延迟加载

        4、尽量减少层级嵌套,可以使用相对布局去解决

(五)内存优化

        1、选择Service的时候,尽可能选择IntentService,因为IntentService在执行完操作之后,自动调用stopSelf(),这样能避免Service关闭不当导致的内存泄漏问题。

        2、加载Bitmap的时候,如果原图高于你设备的分辨率的时候,需要对bitmap进行压缩处理

        3、可以选择使用优化过的数据容器,如:SparseArray  、SparseBooleanArray、LongSparseArray等

(六)性能分析工具

        1、Android profiler:可以对CPU、内存、网络进行分析

        2、Hierarchy Viewer:在Android Device Monitor里,可以分析视图树,进一步分析view的测量、布局、绘制情况





你可能感兴趣的:(Android,Android)