Android布局优化--布局加载实战

布局优化--布局加载实战

 

背景介绍

(1)布局文件读取慢:IO过程

(2)创建View慢:反射(比new慢3倍)

 

有以下两种方法可以优化布局加载,分别为:

 

方法1:异步AsyncLayoutInflater

简称:异步Inflate

工作流程:(1)在WorkThread加载布局,(原生使用的办法是在UI线程中加载布局),(2)加载结束后,回调主线程。

优点:节约主线程的时间。

使用 AsyncLayoutInflater 类实现步骤:

(1)这个类是谷歌提供的,但默认包中没有,需要导入一个包,

在app的 build.gradle 中添加。
implementation 'com.android.support:asynclayoutinflater:28.0.0'

(2)实现 AsyncLayoutInflater,如下:

// 在Activity中的onCreate()方法中,屏蔽下面语句
setContentView(R.layout.activity_main);


// 然后,添加如下代码
        new AsyncLayoutInflater(MainActivity.this).inflate(R.layout.activity_main, null, new AsyncLayoutInflater.OnInflateFinishedListener() {
            @Override
            public void onInflateFinished(@NonNull View view, int i, @Nullable ViewGroup viewGroup) {
                setContentView(view);
                mRecyclerView = findViewById(R.id.recycler_view);
                mRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
                mRecyclerView.setAdapter(mNewsAdapter);
                mNewsAdapter.setOnFeedShowCallBack(MainActivity.this);
            }
        });

 

 

总结

(1)这个类是 final 的,不能被继承。如果想重写类中的方法,必须拷贝一份在此基础上实现。

(2)注意View中不能有依赖主线程的操作。

(3)这个方法只是缓解的作用,并没有从根本上解决(IO操作 和 反射)。

 

 

方法2:X2C方法

背景介绍:

鉴于以上的介绍,我们可以使用java代码来实现布局。

优点:本质上解决了性能问题,(不会IO操作,同时使用new创建)

缺点:引入新问题,不便于开发,可维护性差。(XML的优点是方便预览,维护性好)

 

X2C介绍:即保留了XML的优点,又解决了性能问题。

使用:开发人员写XML,手机系统加载界面的时候,加载的是java代码

原理:APT编译期翻译XML为Java代码

 

使用步骤:

(1)在app的build.gradle中添加两个库

    annotationProcessor 'com.zhangyue.we:x2c-apt:1.1.2'
    implementation 'com.zhangyue.we:x2c-lib:1.0.6'

(2)在加载的Activity中添加 @Xml 注解,如:

@Xml(layouts = "activity_main")
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//      setContentView(R.layout.activity_main);  注释掉原来的。

        // 添加这条语句
        X2C.setContentView(MainActivity.this, R.layout.activity_main);
    }
}

Android布局优化--布局加载实战_第1张图片

 

X2C问题

(1)部分属性Java不支持

(2)失去了系统的兼容(AppCompat)

(3)是开源的一个解决方案,如果要带到线上,需要修改代码,做充分的测试,

 

 

 

 

 

 

 

 

你可能感兴趣的:(Android性能优化)