Android AsyncLayoutInflater使用

710 阅读1分钟

  作用与LayoutInflater类似,区别在与AsyncLayoutInflater在子线程中完成View的创建,在通过callback将创建的视图返回。   核心方法:public void inflate(@LayoutRes int resid, @Nullable ViewGroup parent,@NonNull OnInflateFinishedListener callback) 流程大致如下:

  1. 首先创建一个请求(消息),发送给内部子线程mInflateThread; 11880671-4bc007d7afb9045f.png
  2. 子线程mInflateThread内部执行while死循环,从阻塞队列mQueue中获取消息,并通过反射创建视图;! 11880671-3395944474466ec6.png
  3. 如果在子线程中创建失败,则尝试在主线程创建,并将最终结果传递给callback;![step 3] 11880671-628d1ecc21938064.png 使用AsyncLayoutInflate主要有如下几个局限性:
  4. 所有构建的View创建过程中不能使用限定主线程的函数,如直接使用 Handler 或者是调用 Looper.myLooper();
  5. 异步转换出来的 View 并没有被加到parent视图中,AsyncLayoutInflater 是调用了LayoutInflater.inflate(int, ViewGroup, false),因此如果需要加到 parent视图中,还需要再手动添加;
  6. 不支持设置 LayoutInflater.Factory 或者LayoutInflater.Factory2;
  7. 缓存队列默认大小为10 ,超过了10个则会导致阻塞主线程。