Article / 2026/05/31

性能优化 (三十) 优雅获取界面布局耗时

性能优化 (三十) 优雅获取界面布局耗时 的技术笔记。

优雅获取界面布局耗时

常规方式

  • 耦合

aop/ArtHook

  • 背景:获取每个界面加载耗时
  • 实现:覆写方法、手动埋点
  • 切Acitivity的setContentView
  • @Around(“execution(* android.app.Activity.setContentView(..)”)

ARTHook实现

  • 切Activity的setContentView
  • 获取任一控件耗时
  • 低侵入性
  • LayoutInflater.Factory
  • LayoutInflaterCompat.setFactory2();
 LayoutInflaterCompat.setFactory2(getLayoutInflater(), new LayoutInflater.Factory2() {
            @Nullable
            @Override
            public View onCreateView(@Nullable View parent, @NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs) {
                if (TextUtils.equals("TextView", name)) {

                }
                long startTime = System.currentTimeMillis();
                View view = getDelegate().createView(parent, name, context, attrs);
                Log.i("aa", name + " cost " + (System.currentTimeMillis() - startTime));
                return view;
            }

            @Nullable
            @Override
            public View onCreateView(@NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs) {
                return null;
            }
        });
  • 在activity 的super.onCreate(savedInstanceState);前设置

Giscus 未启用:请在 src/site.config.ts 中配置 repoId 与 categoryId。