1

“随着最近发布的 Android 支持库,第 24 版 Google 开发人员在 v4 库中加入了一个新的辅助类,用于布局的异步膨胀”

这是我的代码:

  Timber.e("Timeinflationstarts");
  AsyncLayoutInflater asyncLayoutInflater=newAsyncLayoutInflater(this.getContext());
  asyncLayoutInflater.inflate(R.layout.async_calendar,mLinearLayout,
          new AsyncLayoutInflater.OnInflateFinishedListener() {
      @Override
      public void onInflateFinished(View view, int resid, ViewGroup parent) {

          parent.addView(view);
          Timber.e("timeWhenInflated");
      }
  });

这是输出:

 07-05 20:36:22.331 18250-18250/? E/PersonalFragment: Timeinflationstarts

 07-05 20:36:22.371 18250-18250/? E/PersonalFragment: timeWhenInflated

问题是 async_calendar.xml 中的视图需要更多时间(然后是 0.04 秒)才能在屏幕上看到,从而阻塞了 UI 线程!

我使视图更重,以确保我看到的滞后远大于 0.04。

4

1 回答 1

1

它可能由于几个原因而发生,

对于要异步膨胀的布局,它需要有一个父级,其 generateLayoutParams(AttributeSet) 是线程安全的,并且作为膨胀的一部分构建的所有视图不得创建任何处理程序或以其他方式调用 myLooper()。如果尝试膨胀的布局由于某种原因无法异步构建,AsyncLayoutInflater 将自动退回到 UI 线程上的膨胀。

此外,AsyncLayoutInflater 不能用于膨胀包含片段的布局。您可以在文档中了解更多信息

于 2016-09-05T14:39:56.440 回答