美文网首页
Android 布局优化

Android 布局优化

作者: yuzhiyi_宇 | 来源:发表于2018-12-08 20:24 被阅读0次

    虽然目前安卓 Android 手机内存可以到了 8G,处理器到了 8 核,但也不意味着 Android 应用可以无限制的使用内存和 CPU 资源,过多的使用内存会导致内存溢出,触发 OOM 错误,过多的使用 CPU 资源会导致手机变得卡顿甚至出现程序无法响应的情况,出现 ANR。无论出现 OOM 还是 ANR,对于用户的体验都是毁灭性打击,严重损害用户使用该应用的积极性。

    ConstraintLayout 布局

    布局优化很简单,就是减少布局文件的层次,减少 Android 绘制时候的工作。
    16年I/O大会上,google发布了全新的布局 -- ConstraintLayout,可以有效地解决布局嵌套过多的问题,提高页面性能,目前安卓新建一个布局的文件默认的布局就是 ConstraintLayout,具体使用可以移驾我同学写的博客,或者前往 ConstraintLayout 官方文档

    include 标签共享布局

    使用 XML 文编编写 Android 应用布局的界面时,经常会遇到在不同的界面需要实现相同的布局,这时候就会写出重复代码,这时候最佳实践方案是将通用的布局抽取出来,独立成一个 XML 文件,需要用到的时候使用 include 标签引入进来,达到布局重用的效果。

    merge 标签

    merge 标签一般和 include 标签一起使用从而减少布局的层级,通过 merge 标签就可以去掉多余的外面一层 Layout 布局。

    <?xml version="1.0" encoding="utf-8"?>
    <merge
        xmlns:android="http://schemas.android.com/apk/res/android">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="merge_text"
            />
    </merge>
    

    ViewStub
    ViewStub 继承了 View,非常轻量且宽高都是0,因此其本身不参与任何的布局和绘制过程。意义在于按需加载所需的布局文件。

      <ViewStub
          android:id="@+id/vs_import"
          android:layout="@layout/widget"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
      />
    

    在需要加载 ViewStub 时,可以按照如下方式进行。

      ViewStub vsImport = findViewById(R.id.vs_import);
      vsImport.setVisibility(View.VISIBLE);
    

    或者

      ViewStub vsImport = findViewById(R.id.vs_import);
      vsImport.inflate();
    

    注意:inflate 如果多次调用会导致程序崩溃,所以推荐使用第一种方法。原因是ViewStub 被 inflate 后就不会在布局中存在。
    当 ViewStub 通过上诉两个方法加载之后,ViewStub 就会被它内部的布局替换掉,这个时候 ViewStub 就不再是整个布局结构的一部了。

    相关文章

      网友评论

          本文标题:Android 布局优化

          本文链接:https://www.haomeiwen.com/subject/uoeocqtx.html