关于优雅获取界面布局耗时的疑问?

来源:5-4 优雅获取界面布局耗时

Fragment丶

2019-07-04

通过LayoutInflaterCompat.setFactory获取每个控件的绘制时间,
但是在非AppCompatActivity中,貌似是不能直接拿到所有控件的,因为没有getDelegate方法(如果可以请说下怎么拿)?
没有的话如何优雅去获取所有控件绘制时间呢?如果是去单个拿,那么岂不是时间更长?
另外我想替换指定ID的控件,但是查找半天也没找到能拿到ID方法,除非先把这个控件New出来,再去拿这个控件的ID就行,但是我想的是先拿到,在判定是否要去new它,请问如何操作呢?
再问LayoutInflaterCompat.setFactory返回的控件都是new的,这样会增大内存消耗吗?比如我界面有100个button,那每次都是 Button button = new Button(context, attrs),这样不会有影响吗?

写回答

2回答

若邪913

2019-11-14

关于第三点,在Activity布局加载的时候,通过源码会发现有一个判断Factory2和Factory的地方,这里如果有Factory2的话,会使用Factory2的onCreateView方法来创建View,但是如果没有实现Factory2的时候,使用默认的是,系统是通过反射的方式来创建的View,反射的性能消耗比正常new要大,可不可以理解为这样也算是对布局创建时的一点点优化呢?

0
0

随风绽放

2019-07-10

同学你好,

  1. 为什么不能换成AppCompatActivity呢?

  2. 使用AttributeSet这个参数试下。

  3. 不会影响,你思考下正常的控件是怎么创建出来的就能得出结论了。

0
1
若邪913
关于第三点,在Activity布局加载的时候,通过源码会发现有一个判断Factory2和Factory的地方,这里如果有Factory2的话,会使用Factory2的onCreateView方法来创建View,但是如果没有实现Factory2的时候,使用默认的是,系统是通过反射的方式来创建的View,反射的性能消耗比正常new要大,可不可以理解为这样也算是对布局创建时的一点点优化呢?
2019-11-14
共1条回复

Top团队大牛带你玩转Android性能分析与优化

由表及里学到国内Top团队对性能问题的体系化解决方案

1656 学习 · 527 问题

查看课程