android各知识点总结 - relativeLayout和LinearLayout的性能对比
总结的意义在于加深自己的印象,同时做好笔记方便复习。本篇文章主要是对android各知识点做个总结,这个周期可能比较长,但是每天总结几个,慢慢就多了。没有先后顺序,想到哪写到哪。。。。
1、relativelayout和linearlayout的性能对比:
relativelayout会对子view做两次measure。 ? 因为relativelayout中子view的排列方式是基于彼此的依赖关系,而这个依赖关系可能和布局中view的顺序并不相同,在确定每个子view的位置的时候,就需要先给所有的子view排序一下。relativelayout的子view如果高度和relativelayout不同,则会引发效率问题,当子view很复杂时,这个问题会更加严重。如果可以,尽量使用padding代替margin。?? ?linearlayout 在有weight时,也会对子view做两次onmeasure 。 ?如果不使用weight属性,linearlayout会在当前方向上进行一次measure的过程,如果使用weight属性,linearlayout会避开设置过weight属性的view做第一次measure,完了再对设置过weight属性的view做第二次measure。由此可见,weight属性对性能是有影响的,而且本身有大坑,请注意避让。在不影响层级深度的情况下,使用linearlayout和framelayout而不是relativelayout。?
采用relativelayout并不会降低层级深度,所以此时在根节点上用linearlayout是效率最高的。而之所以给开发者默认新建了个relativelayout是希望开发者能采用尽量少的view层级来表达布局以实现性能最优,因为复杂的view嵌套对性能的影响会更大一些。
能用两层linearlayout,尽量用一个relativelayout,在时间上此时relativelayout耗时更小。另外linearlayout慎用layout_weight,也将会增加一倍耗时操作。由于使用linearlayout的layout_weight,大多数时间是不一样的,这会降低测量的速度。这只是一个如何合理使用layout的案例,必要的时候,你要小心考虑是否用layout weight。总之减少层级结构,才是王道,让onmeasure做延迟加载,用viewstub,include等一些技巧。1、relativelayout和linearlayout的性能对比:
2、string、stringbuffer与stringbuilder之间的区别
首先string是字符串常量;也就是不可改变的对象。也是执行速度最慢的。stringbuffer与stringbuilder是字符串变量,执行速度快。最快的是stringbuilder。
stringbuilder是非线程安全的,stringbuffer是线程安全的。
具体分析如下:
string?s?=?"abcd";??
s?=?s+1;??
system.out.print(s);//?result?:?abcd1??
上面说string是字符串常量,是不可改变的对象,但是我们明明就是改变了变量s了,为什么说是不可改变的对象呢? ?其实这是一种欺骗,jvm是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s,用来执行第二段代码,也就是说我们之前创建的变量s并没有变化,所以我们说string类型是不可改变的对象了。由于这种机制,每当用string操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾,等待回收,可想而知这样的执行效率会有多低。
而stringbuffer与stringbuilder就不一样了,他们是字符串常量,是可以改变的对象,每当我们用他们对字符串做操作时,实际上是在对一个对象做操作,这样就不会像string一样创建一些额外的对象了,当然速度就更快了。
总结如下:
?如果要操作少量的数据用string单线程操作字符串缓冲区下操作大量数据用stringbuilder多线程操作字符串缓冲区下操作大量数据用stringbuffer。
上一篇: 提高网站转换率R的四个方法
下一篇: 1024——今日“程序员节”