Android调试系列之开发者选项常用功能

来源:互联网 发布:知乎 迷信藏传佛教 编辑:程序博客网 时间:2024/05/23 11:49

原文地址:http://blog.csdn.net/goodlixueyong/article/details/50935977

    开发者选项是Android为开发者提供的一个APP验证、调试、优化等各种功能的入口,它可以帮助我们提高调试效率,协助发现一些bug。这个功能的入口在每个Rom上的位置不尽相同,我的小米手机显示位置是在“其他高级设置”里。有的Rom对开发者模式进行了隐藏,通常的开启方法是进入到设置里的“关于手机”,然后快速连续点击版本号多次,就会显示出来。

       今天来总结一下开发者模式中常用的功能有哪些,这些功能可以给我们提供什么帮助,以及如何来使用它。由于工作内容原因,有些功能用的比较少,这里只对本人常用的熟悉的功能进行讲解。

USB调试

       这应该使用的最频繁的功能,简单讲就是需要打开它你才能通过电脑连接上手机,如果发现调试的时候手机连接不上,关注一下是不是没有打开这个选项吧。

不锁定屏幕

       由于通常我们都会进行锁屏设置,所以开发的时候一段时间不用手机就会黑屏,这个选项开启之后,连接手机将不会锁屏。

显示布局边界

       进行UI设计中时常会用到,开启之后会显示页面布局的边界和框架,通过这个显示结果我们可以看到没有达到预期效果的布局的问题在哪里,开启之后的效果如下。在一个论坛中偶然看到有人说,可以通过“显示布局边界”来判断这个界面或者某个部位是不是html5实现,我只想说,好机智。



窗口动画(过渡动画、动画程序时长)缩放

实现动画效果时,可以直接设置调整动画的时长来看动画效果。当然如果你不嫌麻烦的话,可以在代码里反复调整,每次都去重新编译运行。

强制进行GPU渲染

       这个选项的意思就是强制开启硬件加速。对于用户来讲,开启之后应用会变得流畅,但是由于有些Canvas方法不支持硬件加速,开启之后可能会引起应用crash。

显示GPU视图更新

       开启之后可以看到页面会不停闪烁,尤其是滑动页面的时候闪烁更频繁,这就表示闪烁的页面或者View等开启了硬件加速。如果发现某个页面一点闪烁都没有,那就说明这个页面关闭了硬件加速功能。

调试GPU过度绘制

下图是开启这个选项后的效果:


       该功能会用几种不同的颜色绘制屏幕,来标识overdraw发生的位置以及程度如何,各种颜色的意义如下:
没有颜色: 意味着没有overdraw。像素只画了一次。
蓝色: 意味着overdraw 1倍。像素绘制了两次。大片的蓝色还是可以接受的(若整个窗口是蓝色的,可以摆脱一层)。
绿色: 意味着overdraw 2倍。像素绘制了三次。中等大小的绿色区域是可以接受的但你应该尝试优化、减少它们。
浅红: 意味着overdraw 3倍。像素绘制了四次,小范围可以接受。
暗红: 意味着overdraw 4倍。像素绘制了五次或者更多。这是错误的,要修复它们。

GPU呈现模式分析

       可以选择使用条形图还是线型图显示,选择哪种显示方式显示结果都是类似的。下图是选择条形图后的显示情况:


       每列数据显示了渲染每一帧需要的时间,每一条线意味着一帧被绘制出来,而每条线中的不同颜色又代表着在绘制过程中的不同阶段:
       Draw (蓝色) 代表着View.onDraw()方法。在这个环节会创建/刷新DisplayList中的对象,这些对象在后面会被转换成GPU可以明白的OpenGL命令。而这个值比较高可能是因为view比较复杂,需要更多的时间去创建他们的display list,或者是因为有太多的view在很短的时间内被创建。
       Process (红色) – 执行Display list中的内容并创建OpenGL命令。如果有过多或者过于复杂的display list需要执行的话,那么这阶段会消耗较长的时间,因为这样的话会有很多的view被重绘。而重绘往往发生在界面的刷新或是被移动出了被覆盖的区域。
       Execute (黄色) – 发送OpenGL命令到GPU。这个阶段是一个阻塞调用,因为CPU在这里只会发送一个含有一些OpenGL命令的缓冲区给GPU,并且等待GPU返回空的缓冲区以便再次传递下一帧的OpenGL命令。而这些缓冲区的总量是一定的,如果GPU太过于繁忙,那么CPU则会去等待下一个空缓冲区。所以,如果我们看到这一阶段耗时比较长,那可能是因为GPU过于繁忙的绘制UI,而造成这个的原因则可能是在短时间内绘制了过于复杂的view。

       绿色的横线表示每一帧渲染时间的阈值,值为16ms,这是因为Android流畅运行的帧率为60fps,如果每一帧的渲染时间超过16ms,帧率就降低到小于60fps,会出现丢帧的情况,直观的感受就是页面出现卡顿。如果发现条形图基本上低于绿色的线,说明页面的绘图效率良好,但当条形线频繁的超过绿色的线,应用的布局应该是有问题的,通常都是由于布局不合理或者是太过复杂。通过不同颜色的线所占的比重,可以确定卡顿是由哪个阶段引起的。


不保留活动

       开启这个选项表示页面切到后台以后将会被系统销毁,一般用来模拟设备内存不足时后台Activity被销毁的场景。我们可以用它来测试页面重建的稳定性。如果你的应用在开启它时功能基本正常,说明代码设计得比较合理,代码写的足够健壮。这个具体怎么理解呢?

       我们知道Activity有一个回调方法onSavedInstanceState()会在页面被切到后台时调用来保存页面的状态,如果页面重新切回前台而且已经被系统销毁的情况下,系统会帮我们重建页面,这个状态通常是很难模拟的。开启这个功能,就可以模拟这个情况,然后进行页面状态恢复的调试。也就是说,如果两个Activity A启动B,B启动后系统销毁了页面A,从B页面再切回来时将会白屏(或者黑屏)一下,这就是系统在重建我们的A页面。如果我们对页面恢复的处理不当,就有可能导致页面的重建出现异常,因为毕竟系统没有智能到帮我们保存所有必要的数据,有些还是需要我们自己手动来保存的。我们在测试中发现,如果将B页面的属性设置为透明,也就是设置主题为android:theme="@android:style/Theme.Translucent",这时候系统并不会销毁A页面,那是因为A页面并没有执行onStop()回调方法。

       这个功能只是作为调试辅助开启比较合适,普通用户开启后将严重影响用户体验。


0 0
原创粉丝点击