Android 大厂编码规范

一、前言

做 Android 开发的同学,大概率都遇到过这样的场景:

一个 Activity / Fragment 代码动辄上千行,变量随处定义、方法杂乱堆砌。接手别人的代码时,完全看不懂逻辑分层,维护成本极高。

早年 Android 开发依赖 <!-- editor-fold --> 做代码折叠,写法繁琐、可读性差,如今已被主流大厂淘汰。

// region / // endregion 代码分区,已成为字节、腾讯、阿里、华为等一线互联网公司统一的代码排版规范。

很多开发者仍有疑问:

  • 它是官方强制语法吗?
  • 什么时候该用?怎么规范使用?
  • 有什么禁忌?

本文结合一线大厂最新编码规约 ,完整讲透 region 规范,附带可直接落地的代码模板,看完直接对标企业级工程规范。


二、Region 核心认知(必懂)

1. 是什么?

// region// endregionIDE 层面的代码折叠注释标记,不属于 Java / Kotlin 官方语法。

编译器、打包、运行时会完全忽略------零性能损耗、零逻辑影响。

简单理解:就是给代码做「分组文件夹」,支持 IDE 一键展开 / 折叠,纯优化代码可读性和维护性

2. 发展历史

时间 事件
2005 年 微软 C# 推出官方 #region 语法,分区规范的起源
2018 年 IDEA / Android Studio 2018.1 支持注释式 region 折叠
2019 年 Android Studio 3.3+ 全面普及,替代老旧的 editor-fold
2020--2026 年 国内一线大厂统一落地,成为 Android 业务代码强制排版规范

3. 官方 vs 大厂态度

组织 态度 核心理念
Google 官方 / AOSP 不强制、不使用 代码臃肿应优先抽类、抽方法,而非靠折叠掩盖问题
国内大厂(字节/阿里/腾讯/华为) 中大型页面强制使用,小型类可选 适配业务代码臃肿、多人协作迭代的工程场景

三、大厂统一使用规范(核心落地规则)

1. 适用场景(必用 / 禁用)

✅ 必须使用 region 的场景
  • 代码行数 ≥ 150 行的 Activity、Fragment、Dialog
  • 复杂业务 Presenter、ViewModel(多方法、多状态)
  • 包含「初始化 + 点击事件 + 业务逻辑 + 工具方法」的复杂页面类
❌ 禁止使用 region 的场景
  • 代码行数 ≤ 100 行的工具类、实体类、简单辅助类
  • 单个方法内部、极小代码块(禁止过度分区
  • 嵌套 region(大厂红线规范,绝对禁止)

2. 固定分区顺序(大厂统一模板)

所有页面类统一遵循以下顺序,禁止随意调换,保证团队代码风格一致:

顺序 分区名称 说明
1 成员变量定义 控件、业务变量、状态标记
2 生命周期方法 onCreate / onResume / onStop / onDestroy
3 初始化方法 initViewinitDatainitListener
4 业务交互逻辑 增删改查、页面业务动作
5 点击 / 事件回调 按钮点击、接口回调、监听事件
6 工具私有方法 通用复用逻辑
7 外部暴露方法 供外部调用的 public 方法

3. 命名规范

  • 分区名称语义清晰,统一使用中文描述,简洁无歧义
  • 禁止随意命名(如「随便写」「测试」「临时逻辑」)
  • 固定格式:// region 分区名称
✅ 正确示例
kotlin 复制代码
// region 成员变量定义
// endregion

// region 生命周期
// endregion

四、标准落地代码模板(Kotlin 页面通用)

以下是大厂项目通用的 Activity 分区模板,可直接复用,适配所有业务页面:

kotlin 复制代码
class MainActivity : BaseActivity() {

    // region 1. 成员变量定义
    private lateinit var tvTitle: TextView
    private var pageData: MutableList<String> = mutableListOf()
    private var isFirstLoad = true
    // endregion

    // region 2. 生命周期
    override fun getLayoutResId() = R.layout.activity_main

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        initView()
        initData()
        initListener()
    }

    override fun onResume() {
        super.onResume()
    }

    override fun onStop() {
        super.onStop()
    }

    override fun onDestroy() {
        super.onDestroy()
    }
    // endregion

    // region 3. 初始化逻辑
    private fun initView() {
        tvTitle = findViewById(R.id.tv_title)
    }

    private fun initData() {
        // 页面数据初始化逻辑
    }

    private fun initListener() {
        // 全局点击、监听初始化
    }
    // endregion

    // region 4. 核心业务逻辑
    private fun loadPageData() {
        // 业务核心逻辑
    }

    private fun refreshUI() {
        // UI 刷新逻辑
    }
    // endregion

    // region 5. 事件回调
    private fun onItemClick(position: Int) {
        // 列表/控件点击回调
    }
    // endregion

    // region 6. 通用工具方法
    private fun dp2px(dp: Int): Int {
        // 通用适配工具
        return resources.displayMetrics.density.times(dp).toInt()
    }
    // endregion

    // region 7. 外部暴露方法
    fun updatePageData() {
        // 供外部调用的页面刷新方法
    }
    // endregion
}

五、常见误区与避坑指南(大厂红线)

误区 纠正 红线等级
region 可以优化性能 region 只是 IDE 注释标记,编译后完全不存在,零性能优化 ⚠️ 认知错误
可以嵌套 region 绝对禁止嵌套分区,会导致代码层级混乱、折叠逻辑错乱 🔴 大厂红线
小文件无脑加 region 100 行以内的简单类禁止添加 region,过度分区显得冗余不专业 ⚠️ 规范禁止
分区内代码杂乱无章 每个 region 区块内只能放同类型逻辑,禁止生命周期区混放业务代码 🔴 大厂红线

六、Region 带来的工程价值

1. 极大降低协作成本

统一的代码分层规范,新人接手项目、代码 CR 评审时,能快速定位对应逻辑,无需通读全量代码。

2. 规避代码臃肿混乱

业务代码分层清晰,避免「变量乱飞、方法乱堆」的烂代码风格,长期迭代不会失控

3. 适配大型团队迭代

多人协作开发同一页面时,各自维护对应分区代码,减少代码冲突,规范统一。


七、总结

要点 说明
本质 // region / // endregion工程规范,非官方语法,零副作用
行业现状 谷歌原生不推荐,但国内所有一线大厂已统一落地
四大原则 大页面必分、小文件不加、禁止嵌套、顺序固定
核心价值 区分「新手代码」和「企业级规范代码」的重要标准

八、拓展:XML 同样支持 Region

除了 Kotlin / Java 代码,Android 布局 XML 也支持分区折叠,规范一致:

xml 复制代码
<!--region 顶部标题栏-->
<LinearLayout
    android:id="@+id/ll_title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
<!--endregion-->

相关推荐
来让爷抱一个1 小时前
MonkeyCode 实战:AI 驱动的 GitHub PR 工作流优化
人工智能·开源·ai编程
SoftLipaRZC1 小时前
C语言文件:文件操作完全指南
android·java·c语言
来可电子小仙女1 小时前
便携车载 CAN 数据记录仪|CANFDLog-OTL4-X:告别车载拖线电脑,离线搞定 CAN FD+XCP 全量数据采集
网络·硬件·记录仪
IT策士1 小时前
第 43 篇 k8s之集群网络策略:NetworkPolicy 入门
网络·容器·kubernetes
2501_916007471 小时前
不用 Mac 也可以 Windows下管理iOS描述文件的非Xcode完整指南
android·ios·小程序·https·uni-app·iphone·webview
m0_738120721 小时前
渗透测试基础——一文详解CORS跨域劫持漏洞原理与利用
服务器·网络·安全·web安全·网络安全
Jun6262 小时前
QT(6)-UDP数据收发
网络·网络协议·udp
YanDDDeat2 小时前
MySQL性能排查,慢查询导致CPU飙高的完整记录
mysql·安全·性能优化