请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

正在回答 回答被采纳积分+3

2回答

若邪913 2019-11-14 01:43:54

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

0 回复 有任何疑惑可以回复我~
随风绽放 2019-07-10 11:24:10

同学你好,

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

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

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

0 回复 有任何疑惑可以回复我~
  • 关于第三点,在Activity布局加载的时候,通过源码会发现有一个判断Factory2和Factory的地方,这里如果有Factory2的话,会使用Factory2的onCreateView方法来创建View,但是如果没有实现Factory2的时候,使用默认的是,系统是通过反射的方式来创建的View,反射的性能消耗比正常new要大,可不可以理解为这样也算是对布局创建时的一点点优化呢?
    回复 有任何疑惑可以回复我~ 2019-11-14 01:44:20
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信