Android应用性能优化系列前瞻

由于各项琐碎事务,辍笔整整两月有余,趁此间隙,稍稍梳理了下从事Android开发三年来积累的知识点,准备著写一个性能优化系列的博文。

恰好之前React-Native原理也看得七七八八,React-Native虽是一个方向,但终究与Native开发并无太大关系,而笔者对Javascript也仅仅略懂一二,所以也就点到为止了。React-Native前端方面的技术文章一搜一大把,有兴趣的自行百度就可以了,笔者以后的博文肯定还是要回归到Native开发中来。

关于Android应用性能优化方面,网上的博文也是浩如烟海,但大多数却是千篇一律或是束广就狭。本系列会尝试结合实际开发场景和尽量分析原理来研究如何做好Android应用性能优化,期望既能不落窠臼,又能对各位有所帮助。

Android应用性能优化系列,大概会分成三部分:视图篇、逻辑篇和代码规范篇。

视图篇

主要涵盖视图树层级优化、自定义视图、图片优化,常用布局性能缺陷等多个方面,为避免老生常谈,会针对一些细节做深入分析。

在Android开发中,视图性能优化其实是一个非常重要的点,然而也是绝大多数公司最容易忽略的,大家都知道UI线程中不能做耗时操作或是又知道Handler容易导致内存泄漏,却往往不知道如何做好视图方面的优化,大多数人甚至仅仅只知道视图层级不能太深,bitmap手动recycle这些皮毛。

国内的移动应用程序,尤其是大公司的产品,往往都有一个特点,就是喜欢在一个页面中堆各种功能,各种元素,甚至各种动效。像这种页面,除了数据和接口多导致网络加载慢,还容易引发过度绘制,过度布局,视图层级深等问题,这不仅仅浪费GPU资源,还容易导致卡顿甚至ANR等严重影响用户体验的缺陷。需求无法改变,那么,就只能在开发中去尽量提高性能来避免这些问题。

举一个简单的例子。在设计页面的时候,设计师通常喜欢在ScrollView中嵌套ListView,稍有经验的开发会避免这样,而使用ListView+Header+Footer或者是使用ItemViewType来达到同样的效果。但是如果一个ScrollView嵌有多个List,那可能就懵逼了,如果用线性布局嘛,又嫌麻烦。然而,车到山前必有路,‘聪明’的程序员想到了一个好办法,重写ListView的onMeasure方法,像这样:

    @Override  
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);  
        super.onMeasure(widthMeasureSpec, expandSpec);  
    }  

这就是所谓的NoScrollListView,想怎么嵌套就怎么嵌套,代码写起来舒服,又达到了页面设计的效果。乍一看很厉害,其实却是大错特错,因为其中隐藏了一个很严重的性能问题:ListView子视图过度创建和绘制。然而,这可能是绝大多数开发都意识不到的。具体原因和解决方案暂时先不做分析了,留到以后的博文中去慢慢梳理。

所以:视图优化很重要!视图优化很重要!视图优化很重要!

逻辑篇:

包括常见内存泄漏、网络请求、线程使用等方面。

这些是大多数开发最熟悉的,网上文章也有甚多精品,避免大家看得心烦,我会特意避开一些说烂了的点,比如Handler优化等,只分析一些容易忽视的知识点,所以也就没太多东西可讲,篇幅可能会不是很长。

代码规范篇

良好的编码规范是软件项目的质量保证,这句话是颠簸不破的真理。

不正确的代码规范容易导致很多问题,一是项目难以维护,二是bug层出不穷,三就是性能下降。

这方面大多数都是细节问题,也许是一个变量,也许是一个方法,也许是一个类,在如今的高配置手机上,不恰当的代码也行导致的性能问题微乎其微,但终究还是我们需要注意和慎重的点,毕竟集腋成裘,聚沙成塔,也许就是小小1K的内存溢出导致程序崩溃。

同样举一个例子。查找数组中匹配某条件一个数据,通常是for循环+if判断,轻轻松松三两行代码就达到目的了。但是很多人可能都不会注意,if判断中找到匹配的值后需要break出循环。非常小的一个点,但是如果数组长度足够大,写与不写break的差别导致的性能差异将会非常大。所以养成良好的代码习惯非常重要!


最后,写这个系列的主要目的是分享和梳理自己的知识积累,希望从一个不一样的角度来看Android应用性能优化!


本博客不定期持续更新,欢迎关注和交流:

http://blog.csdn.net/megatronkings

你可能感兴趣的:(Android性能优化)