android - v24 AsyncLayoutInflater 在 ui 线程上膨胀

标签 android asynchronous layout-inflater ui-thread support-v4

“随着最近发布的 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 中的 View 在屏幕上显示时间更长(然后是 0.04 秒),阻塞了 UI 线程!

我使 View 变得更重,以确保我看到的延迟远远超过 0.04。

最佳答案

它可能由于多种原因而发生,

For a layout to be inflated asynchronously it needs to have a parent whose generateLayoutParams(AttributeSet) is thread-safe and all the Views being constructed as part of inflation must not create any Handlers or otherwise call myLooper(). If the layout that is trying to be inflated cannot be constructed asynchronously for whatever reason, AsyncLayoutInflater will automatically fall back to inflating on the UI thread.

此外,AsyncLayoutInflater 不能用于扩充包含 fragment 的布局。您可以在 docs 中了解更多信息

关于android - v24 AsyncLayoutInflater 在 ui 线程上膨胀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38209918/

相关文章:

java - Android 通知相互重叠

android - 如何以编程方式在 Android 中查找平板电脑或手机?

Android点击列表项勾选错复选框

javascript - 使用 Jasmine,如何使用 callFake() 和 done() 测试异步调用?

android - LayoutInflater attachToRoot 参数是什么意思?

java - 如何在 Webview 的 OnRecievedError 上增加新布局?

android - 使用 LayoutInflater 创建动态 View

IOS递归分派(dispatch)异步

javascript - 真正的异步、非阻塞 javascript 不是不可能的吗?

java - Android 6 上的布局问题。充气机问题?在 Android 5 及更早版本上运行良好