AsyncLayoutInflater的使用

如果xml文件过大或者页面布局嵌套过深,布局的加载就会比较耗时

如何解决:(1) 优化布局文件,避免布局嵌套过深

                  (2) 把耗时的布局渲染操作放在子线程中,等inflate操作完成后再回调到主线程

Android 为我们提供了AsyncLayoutInflater类来进行异步布局加载

 

public class MainActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        new AsyncLayoutInflater(this).inflate(R.layout.activity_main, null, new AsyncLayoutInflater.OnInflateFinishedListener() {
            @Override
            public void onInflateFinished(@NonNull View view, int resid, @Nullable ViewGroup parent) {
                setContentView(R.layout.activity_main);
            }
        });
        
    }
}

使用AsyncLayoutInflater 的局限性:

所有构建的View中必须不能直接使用 Handler 或者是调用 Looper.myLooper(),因为异步线程默认没有调用 Looper.prepare ();

异步转换出来的 View 并没有被加到 parent view中,必须手动添加;

AsyncLayoutInflater 不支持设置 LayoutInflater.Factory 或者 LayoutInflater.Factory2;

同时缓存队列默认 10 的大小限制如果超过了10个则会导致主线程的等待;

 

发布了224 篇原创文章 · 获赞 67 · 访问量 40万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览