Android常用性能优化方案

2019/4/28
 
android 性能优化
android性能优化在实际开发中会经常应用到,当项目越来越庞大时,性能优化就显得更加重要,写出高性能优化代码不但需要丰富的经验,而且还需要了解其原理,这样才有助于我们写出高性能的代码,今天我们来总结一下日常开发中常用性能优化方案,看看你都熟悉哪些。 
android性能优化包括:布局优化、绘制优化、内存泄漏优化、响应速度优化、listview优化、Bitmap优化、线程优化等。
 
布局优化
尽量减少布局层级,relativeLayout比LinearLayout的性能差,relativeLayout的性能优于嵌套布局,布局优化的另外一个手段就是采用<include>、<merge>标签和ViewStub,<include>标签主要用于布局重用,<merge>标签一般和<include>标签去配合使用,它可以降低减少布局的层级,而ViewStub则提供了按需加载的功能,当需要时才会将ViewStub中的布局加载到内存中,这提高了程序的初始化效率。

郑州APP开发公司,就找河南天频信息有限公司

绘制优化
绘制优化指View的onDraw方法要避免执行大量的操作,这主要体现在两个方面: 
(1)onDraw方法中不要创建新的局部对象,因为onDraw方法可能被频繁的调用,这样一瞬间会产生大量的临时对象,这些对象不仅占用了过多的内存,而且还会导致系统频繁的gc,降低了程序的执行效率。 
(2)onDraw方法中不要执行耗时任务,也不能执行成千上万次的循环操作,大量的循环十分抢占CPU的时间片,这会造成view的绘制过程不流畅。
 
内存泄漏优化
内存泄漏优化分为两个方面:
(1)避免写出内存泄漏的代码、 
(2)通过分析工具,比如MAT来找出潜在的内存泄漏继而解决。
 
内存泄漏场景:
(1)静态变量导致的内存泄漏 
(2)单例模式导致的内存泄漏 
(3)属性动画导致的内训泄漏:属性动画中有一种无限循环的动画,它持有Activity中View的引用,而View又持有Activity,这样就导致Activity已经不显示了,但是仍然销毁不掉,解决方案就是在Activity的onDestroy()方法中将动画停止。

郑州APP开发公司,就找河南天频信息有限公司

响应速度优化
避免在主线程中去做耗时操作,Activity如果5s没有响应,则会出现ANR,BroadcastReceiver如果 
10s还未执行完操作也会出现ANR。
 
ListView和Bitmap优化
listView优化主要分为三个方面:
(1)使用ViewHolder并避免在getView方法中执行耗时操作 
(2)根据列表的滑动状态来控制任务的执行频率,比如当列表快速滑动时不适合开启大量的异步任务, 
(3)使用硬件加速来使listView的滑动更加流畅
 
Bitmap优化:
主要是通过BitmapFactory.Options来根据需要对图片进行采样,采样的过程主要使用到了BitmapFactory.Options 
来根据需要对图片进行采样,采样的过程主要使用到了BitmapFactory.Options的inSampleSize参数

郑州APP开发公司,就找河南天频信息有限公司

线程优化
线程优化的思想是采用线程池,避免程序中存在大量的Thread。线程池可以重用内部的线程,从而避免了线程的创建和销毁带来的性能开销,同时线程池可以有效的控制线程的最大并发数,避免了大量线程因互相抢占系统资源而导致阻塞现象的发生。因此在实际开发中应尽量采用线程池,而不是每次都要创建一个Thread对象。
 
一些性能优化的建议
(1)避免创建过多的对象 
(2)不要过多的使用枚举类型,枚举占用的内存空间比整型要大 
(3)常量请使用static final来修饰 
(4)使用一些android也有的数据结构,如SparseArray和Pair 
(5)适当的使用软引用和弱引用 
(6)采用内存缓存和磁盘缓存 
(7)尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄漏的问题

郑州APP开发公司,就找河南天频信息有限公司