Kevin Learn Android:绘制优化

2021-11-25  本文已影响0人  Kevin_小飞象
每日一图.jpg

绘制性能的好坏主要影响:Android 应用中的页面显示速度。其实质就是页面的绘制时间。我们优化的方向主要是:1.降低 View.onDraw() 的复杂度;2.避免过度绘制。

卡顿原因

优化方案

  1. 降低 View.onDraw() 的复杂度
  1. 避免过度绘制
    过度绘制 会导致屏幕显示的色块不同,具体如下:
    过渡绘制.png

我们要尽可能避免过度绘制:

方案:

    // 方式1:在应用的主题中添加如下的一行属性
    <item name="android:windowBackground">@android:color/transparent</item>
    <!-- 或者 -->
    <item name="android:windowBackground">@null</item>

    // 方式2:在 BaseActivity 的 onCreate() 方法中使用下面的代码移除
    getWindow().setBackgroundDrawable(null);
    <!-- 或者 -->
    getWindow().setBackgroundDrawableResource(android.R.color.transparent);
  1. 其他优化方案
    优化方案.png

工具

1. Traceview

TraceView是Android SDK中自带的数据采集和分析工具。一般来说,通过TraceView我们可以得到以下两种数据:

1. 使用 Traceview
要分析Traceview,则首先要得到一个trace文件,trace文件的获取有两种方式,分别是在 DDMS 中使用和在代码中加入调试语句,下面分别对这两种方式进行介绍。

DDMS中使用
1.首先我们要打开Android Studio的Tool中的Android Device Monitor,并连接手机。
2.选择相应的进程,并单击Start Method Profiling按钮。
3.对应用中需要监控的点进行操作。
4.单击Stop Method Profiling按钮,会自动跳到TraceView视图。

代码中加入调试语句
如果开发中出现不好复现的问题,则需要在代码中添加TraceView监控语句,代码如下所示。

Debug.startMethodTracing();
...
Debug.stopMethodTracing();

在开始监控的地方调用startMethodTracing方法,在需要结束监控的地方调用stopMethodTracing方法。系统会在SD卡中生成trace文件,将trace文件导出并用SDK中的Traceview打开即可。当然不要忘了在manifest中加入 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>权限。

2. 分析Traceview
为了分析Traceview,我们来举一个简单的例子来生成trace文件,这里采用第二种方式:代码中加入调试语句。代码如下所示。

public class CoordinatorLayoutActivity extends AppCompatActivity {
    private ViewPager mViewPager;
    private TabLayout mTabLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tab_layout);
        Debug.startMethodTracing("test");//1
        initView();
   ...
    }
    private void initView() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    @Override
    protected void onStop() {
        super.onStop();
        Debug.stopMethodTracing();
    }
}

在注释1处调用了startMethodTracing方法开始监控,其中test是生成的trace文件的名称。在initView中我们特意调用sleep方法来做耗时操作。在onStop方法中我们调用了stopMethodTracing方法结束监控。这时会在SD卡根目录生成test.trace文件,我们将该文件导出到桌面,用Traceview来分析test.trace文件,我们在cmd中执行如下语句。


cmd.png

优质文章:

上一篇 下一篇

猜你喜欢

热点阅读