主目录见:Android高级进阶知识(这是总目录索引)
卡顿优化这应该是写代码时候要注意的,我们上一篇文章布局优化(扁平化,Merge的使用,ViewStub的使用)里面总结了一些解决UI卡顿的方法,今天我这里重新贴一下:
在拼接字符串时候尽量使用StringBuilder避免大量的GC导致卡顿;
避免在主线程做大量的计算任务,比如递归的操作导致CPU时间占用长导致卡顿;
去掉window的背景,因为DecorView默认会有一个纯色的背景,在我们布局设置了背景的话,那么这个背景对我们来说是多余的;
去掉不必要的背景,因为在我们布局有嵌套的情况下,如果都设置了背景的话有可能存在不必要的背景导致重绘;
利用clipRect的方式来减少绘制层数,一个典型的例子就是扑克牌重叠导致重绘;
利用include,merge,ViewStub等标签来减少嵌套层数。
今天这里我主要来说说第一个使用StringBuilder和第二个在主线程做大量的计算任务导致的卡顿,这里的例子也是看到别人当初写的一个我感觉很好的例子,这里用来给大家分享一下。
一.目标
我们这篇文章主要是为了给大家分享两个例子然后让大家学会看工具的报告情况,所以我们目标就是:
1.学会懂得优化例子;
2.学会通过报告来看例子中出现的问题。
二.例子分析
1.拼接字符串例子
我们都知道,String型的变量是不可改变的对象,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多低。而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些额外的对象进行操作了,当然速度就快了。
例子这里利用WebView加载一张gif图片,然后在gif运动的时候,主线程去执行我们的大量拼接字符串操作来模拟卡顿情况。我们这里的加载gif图片代码如下:
WebView webView = (WebView) findViewById(R.id.webview);
webView.getS