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-->

相关推荐
喝拿铁写前端19 小时前
我替你试了:GitNexus 不是更强的搜索框
开源·资讯
墨狂之逸才1 天前
Android TV WebView 遥控器按键处理:从全透传到白名单
android
plainGeekDev1 天前
MVC 写法 → MVVM
android·java·kotlin
Tigger1 天前
受不了 ¥98/年的订阅,我用 Vibe Coding 自己写了个剪贴板工具
人工智能·开源·mac
恋猫de小郭1 天前
Flutter Patchwork,不用 Fork 改依赖包源码的第三方工具
android·前端·flutter
三少爷的鞋1 天前
“结构化”这个词,本质上就是——把混乱的东西变成有组织、有规则、有边界的东西
android
冬奇Lab2 天前
每日一个开源项目(第140篇):AgentScope 2.0 - 阿里开源的生产级 Agent 框架
人工智能·开源·agent
冬奇Lab2 天前
Skill 系列(04):Skill 指标体系——L1/L2/L3 三层监控,让质量下降有据可查
人工智能·开源·llm
方白羽2 天前
Android Gradle 缓存与文件目录深度解析
android·gradle·android studio
曲幽2 天前
Termux里的二进制和脚本,到底怎么运行才不踩坑?Termux-service 保活妙招!
android·termux·nohup·services·wake-lock