/****************2016年4月25日 更新******************************/
知乎:对于开发者来说,Android 的开发者选项里有哪些实用的功能?
汤涛:
最近刚好花了点时间整理研究它,为此写了一篇文章,贴出内容大家可以看看。
Android开发者选项,看起来很简单的事情,其实很多同学对它了解得不够,Google用心良苦得为我们设计了这么多小开关都是有它的作用的,今天也花了点时间,过了一遍全部的30多个开关,从中整理出15个对日常Android开发比较有帮助的选项。
需要指出的是,不同的ROM对开发者选项的支持不一样,精简掉一些很正常,我下面提到的都是官方支持的功能,当然不同的官方版本支持程度也不一样,你手机上找不到也别奇怪。
抱歉这里不介绍开发者选项在哪怎么开启之类的问题。
1. Stay awake
充电时保持屏幕唤醒,开发的时候,时不时的锁屏真是够了,开启它后只要插着USB线就不需要总去解锁屏幕啦。
2. Select runtime(Dalvik or ART)
ART runtime下你的应用会更加丝滑,目前高版本的Android上已经直接是ART runtime了,但作为Android开发也许需要保证你的应用在两种runtime下都能正常运行,这可能是测试时需要更多考虑的。
3. Process stats
里面有关于当前运行进程的一切信息,对于一般用户,它就是一堆无意义的数字,对于Android开发人员来说,调试时这些信息也许可以帮你大忙。
4. USB debugging
这个无需介绍,不开它怎么调试呢?(虽然现在都流行无线调试了)
5. Allow mock locations
当你的应用需要用到GPS功能,获取位置信息时(比如天气应用),可以通过它搭配一些位置模拟应用,模拟全球任何地点。(还能干什么?机智的你肯定想到啦)
6. Show surface updates
在界面绘制时,闪烁提醒,开启它后简直能闪瞎你的眼睛,但有时候我们需要精确知道具体的界面绘制细节时,不得不需要忍受这种折磨。
7. Show layout bounds
显示布局格子,当你看到一个应用有很棒的界面效果,想知道它是怎么布局的?开启这个功能即可。我更常用的使用场景是:每当有PM过来问我人家这个界面是Native实现的,还是类似Hybrid方案的Web实现时,我就让他开启这个功能,WebView是一个整体的格子,Native View是各种小格子组合而成。(除非自己重绘实现自定义View, 一般复杂布局也不会这么干)
8. Force RTL layout direction
强制RTL布局,RTL也就是Right To Left,阿拉伯国家一般有这种文化,类似古时候的中国,文字从右往左读,包括界面布局也是从右往左的,感觉操作习惯都跟我们是镜像的,如果你跟我一样不幸需要做这种坑爹适配的话,这也是必须掌握的技能。
9. Animation scale
动画的尺度、速度调整也是很有用的功能,尤其在实现复杂的组合动画效果时,调慢点可以看得更清楚,当然你可以在自己代码里调慢,但每次改代码重新build很麻烦对不对?而且如果是PM走过来让你研究一下某款App的酷炫动画效果呢?
10. Simulate secondary displays
它允许你模拟不同屏幕尺寸下应用的表现,IDE里虽然也有类似的功能,可那毕竟只是个静态的效果。
11. Debug GPU overdraw
这里是指不正确的过度绘制:
原色: 没有过度绘制
蓝色: 一次过度绘制
绿色: 两次过度绘制
粉色: 三次过度绘制
红色: 四次及以上过度绘制。
值得提醒的是,过度绘制有时是无法避免的,Android建议是不要超过一次过度绘制,也就是可以是蓝色的,不能绿了。
12. Strict mode enabled
严苛模式下,当应用做了一些影响性能的事情,屏幕会闪一下提醒你。你也可以在代码里为自己的应用开启严苛模式,一旦发现一些性能问题,就会有详细Log输出, 为避免影响线上用户,建议只在Debug模式下开启。
13. Show CPU usage
在你屏幕右上角显示一个小窗口,提示当前CPU的各种信息,在性能调试时会有一些帮助,看是否是CPU的负载过高导致了性能问题。
14. Profile GPU rendering
看下面这张图,就明白它的作用了,开启后,会在下方显示一张实时绘制图,记住那条绿线是性能流畅与否的底线,超过的时刻就会出现掉帧,就会有卡顿的感觉,界面性能调优的一个最重要指标就是将所有界面操作尽量优化到那条绿线以下。
15. Don't keep activities
开启这个选项后,当你从Activity A跳转到Activity B时,Activity A就会被立即销毁,这一般用来模拟设备内存不足时后台Activity被销毁的场景,如果你的应用能做到开启它时功能仍基本正常,说明代码设计得比较合理,不同Activity之间的耦和很低,对于复杂业务的应用来说,能做到这点真心不容易。
/**********************************************/
当app界面是自上而下,自左而右,orientation 朝向,vertical竖直方向,horizontal水平方向,水平方向如果空间不足,控件会被挤出屏幕
控件之间的分割线其实就是一个View对象 <View/>,设置高度1dip,background黑色
Android4.0 开发者选项里面有个显示布局边界,可以显示出布局的界线
测试代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#fff" android:background="#88000000" android:text="我是功能2"/> <RelativeLayout android:layout_width="match_parent" android:layout_height="80dp"> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="25sp" android:textColor="#000000" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:text="我是大文本" /> <TextView android:layout_below="@id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:textColor="#66000000" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:text="我是小文本" /> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_alignParentRight="true" /> </RelativeLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#ccc" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="80dp"> <TextView android:id="@+id/tv_title1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="25sp" android:textColor="#000000" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:text="我是大文本" /> <TextView android:layout_below="@id/tv_title1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:textColor="#66000000" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:text="我是小文本" /> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_alignParentRight="true" /> </RelativeLayout> </LinearLayout>