以下内容摘自 阿里巴巴Android开发手册
我们的目标是:
- 防患未然,提升质量意识,降低故障率和维护成本;
- 标准统一,提升协作效率;
- 追求卓越的工匠精神,打磨精品代码。
- 【强制】必须遵守,违反本约定或将会引起严重的后果;
- 【推荐】尽量遵守,长期遵守有助于系统稳定性和合作效率的提升;
- 【参考】充分理解,技术意识的引导,是个人学习、团队沟通、项目合作的方向。
阿里Android开发规范:资源文件命名与使用规范
阿里Android开发规范:四大基本组件
阿里Android开发规范:UI 与布局
阿里Android开发规范:进程、线程与消息通信
阿里Android开发规范:文件与数据库
阿里Android开发规范:Bitmap、Drawable 与动画
阿里Android开发规范:安全与其他
1、【强制】布局中不得不使用 ViewGroup 多重嵌套时,不要使用 LinearLayout 嵌套,改用 RelativeLayout,可以有效降低嵌套数。
说明:
Android 应用页面上任何一个 View 都需要经过 measure、layout、draw 三个步骤才能被正确的渲染。从 xml layout 的顶部节点开始进行 measure,每个子节点都需要向自己的父节点提供自己的尺寸来决定展示的位置,在此过程中可能还会重新measure(由此可能导致 measure 的时间消耗为原来的 2-3 倍)。节点所处位置越深,套嵌带来的 measure 越多,计算就会越费时。这就是为什么扁平的 View 结构会性能更好。同时,页面拥上的 View 越多,measure、layout、draw 所花费的时间就越久。要缩短这个时间,关键是保持 View 的树形结构尽量扁平,而且要移除所有不需要渲染的View。理想情况下,总共的 measure,layout,draw 时间应该被很好的控制在 16ms以内,以保证滑动屏幕时 UI 的流畅。要找到那些多余的 View(增加渲染延迟的 view),可以用 Android Studio Monitor里的 Hierarachy Viewer 工具,可视化的查看所有的 view。
正例:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout>
<RelativeLayout>
<TextView/>
...
<ImageView/>
</RelativeLayout>
</android.support.constraint.ConstraintLayout>
反例:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout>
<LinearLayout>
<RelativeLayout>
<TextView/>
...
<ImageView/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
多重嵌套导致 measure 以及 layout 等步骤耗时过多。
扩展参考:
- https://developer.android.com/studio/profile/hierarchy-viewer.html
- http://mrpeak.cn/android/2016/01/11/android-performance-ui
2、【推荐】在 Activity 中显示对话框或弹出浮层时,尽量使用 DialogFragment,而非Dialog/AlertDialog,这样便于随Activity生命周期管理对话框/弹出浮层的生命周期。
正例:
public void showPromptDialog(String text){
DialogFragment promptDialog = new DialogFragment() {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
View view = inflater.inflate(R.layout.fragment_prompt, container);
return view;
}
};
promptDialog.show(getFragmentManager(), text);
}
3、【推荐】源文件统一采用 UTF-8 的形式进行编码。
4、【强制】禁止在非 ui 线程进行 view 相关操作。
5、【推荐】文本大小使用单位 dp,view 大小使用单位 dp。对于 Textview,如果在文字大小确定的情况下推荐使用 wrap_content 布局避免出现文字显示不全的适配问题。
6 、【强制】禁止在设计布局时多次设置子 view 和父 view 中为同样的背景造成页面过度绘制,推荐将不需要显示的布局进行及时隐藏。 <