Android 开发规范(完结版)

本文详细介绍了Android开发中的代码样式、资源文件、版本统一、第三方库和测试等多个方面的规范,旨在提高代码质量和团队协作效率。包括代码中的大括号使用、方法编写、类成员顺序、函数参数排序、字符串常量命名、Activities和Fragments的传参策略,以及资源文件如anim、color、drawable等目录的命名规则。此外,文章还讨论了版本统一、第三方库选择、注释规范和测试实践等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 单个的大写字母,后面可以跟一个数字(如:E, T, X, T2)。
  2. 以类命名方式(参考3.2 类名),后面加个大写的 T(如:RequestT, FooBarT)。

更多还可参考:[阿里巴巴 Java 开发手册](()

4 代码样式规范

4.1 使用标准大括号样式

左大括号不单独占一行,与其前面的代码位于同一行:

class MyClass {
int func() {
if (something) {
// …
} else if (somethingElse) {
// …
} else {
// …
}
}
}

我们需要在条件语句周围添加大括号。例外情况:如果整个条件语句(条件和主体)适合放在同一行,那么您可以(但不是必须)将其全部放在一行上。例如,我们接受以下样式:

if (condition) {
body();
}

同样也接受以下样式:

if (condition) body();

但不接受以下样式:

if (condition)
body(); // bad!

4.2 编写简短方法

在可行的情况下,尽量编写短小精炼的方法。我们了解,有些情况下较长的方法是恰当的,因此对方法的代码长度没有做出硬性限制。如果某个方法的代码超出 40 行,请考虑是否可以在不破坏程序结构的前提下对其拆解。

4.3 类成员的顺序

这并没有唯一的正确解决方案,但如果都使用一致的顺序将会提高代码的可读性,推荐使用如下排序:

  1. 常量
  2. 字段
  3. 构造函数
  4. 重写函数和回调
  5. 公有函数
  6. 私有函数
  7. 内部类或接口

例如:

public class MainActivity extends Activity {

private static final String TAG = MainActivity.class.getSimpleName();

private String mTitle;
private TextView mTextViewTitle;

@Override
public void onCreate() {

}

public void setTitle(String title) {
mTitle = title;
}

private void setUpView() {

}

static class AnInnerClass {

}
}

如果类继承于 Android 组件(例如 ActivityFragment),那么把重写函数按照他们的生命周期进行排序是一个非常好的习惯,例如,Activity 实现了 onCreate()onDestroy()onPause()onResume(),它的正确排序如下所示:

public class MainActivity extends Activity {
//Order matches Activity lifecycle
@Override
public void onCreate() {}

@Override
public void onResume() {}

@Override
public voi 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 d onPause() {}

@Override
public void onDestroy() {}
}

4.4 函数参数的排序

在 Android 开发过程中,Context 在函数参数中是再常见不过的了,我们最好把 Context 作为其第一个参数。

正相反,我们把回调接口应该作为其最后一个参数。

例如:

// Context always goes first
public User loadUser(Context context, int userId);

// Callbacks always go last
public void loadUserAsync(Context context, int userId, UserCallback callback);

4.5 字符串常量的命名和值

Android SDK 中的很多类都用到了键值对函数,比如 SharedPreferencesBundleIntent,所以,即便是一个小应用,我们最终也不得不编写大量的字符串常量。

当时用到这些类的时候,我们 必须 将它们的键定义为 static final 字段,并遵循以下指示作为前缀。

字段名前缀
SharedPreferences PREF_
Bundle BUNDLE_
Fragment Arguments ARGUMENT_
Intent Extra EXTRA_
Intent Action ACTION_

说明:虽然 Fragment.getArguments() 得到的也是 Bundle ,但因为这是 Bundle 的常用用法,所以特意为此定义一个不同的前缀。

例如:

// 注意:字段的值与名称相同以避免重复问题
static final String PREF_EMAIL = “PREF_EMAIL”;
static final String BUNDLE_AGE = “BUNDLE_AGE”;
static final String ARGUMENT_USER_ID = “ARGUMENT_USER_ID”;

// 与意图相关的项使用完整的包名作为值的前缀
static final String EXTRA_SURNAME = “com.myapp.extras.EXTRA_SURNAME”;
static final String ACTION_OPEN_USER = “com.myapp.action.ACTION_OPEN_USER”;

4.6 Activities 和 Fragments 的传参

ActivityFragment 传递数据通过 IntentBundle 时,不同值的键须遵循上一条所提及到的。

ActivityFragment 启动需要传递参数时,那么它需要提供一个 public static 的函数来帮助启动或创建它。

这方面,AS 已帮你写好了相关的 Live Templates,启动相关 Activity 的只需要在其内部输入 starter 即可生成它的启动器,如下所示:

public static void start(Context context, User user) {
Intent starter = new Intent(context, MainActivity.class);
starter.putParcelableExtra(EXTRA_USER, user);
context.startActivity(starter);
}

同理&#x

在若依(Ruoyi框架中,菜单配置和路由参数的设置是非常重要的环节。以下是详细的步骤和注意事项: ### 1. 菜单配置 若依的菜单配置通常在数据库中进行,具体表为 `sys_menu`。在配置菜单时,需要注意以下几个字段: - `menu_name`:菜单名称 - `parent_id`:父级菜单ID - `order_num`:菜单顺序 - `path`:路由路径 - `component`:组件路径 - `perms`:权限标识 - `icon`:菜单图标 - `type`:菜单类型(目录、菜单、按钮) ### 2. 路由参数设置 在若依中,路由参数通常在 `path` 和 `component` 字段中设置。假设我们有一个菜单项需要跳转到某个页面,并且需要传递一些参数,可以按照以下步骤进行配置: #### 示例配置 假设我们要配置一个菜单项,路径为 `/example`,组件为 `example.vue`,并且需要传递一个参数 `id`。 1. **数据库配置**: ```sql INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `perms`, `icon`, `type`) VALUES ('示例菜单', 0, 1, 'example', 'example', 'example:view', 'example', 1); ``` 2. **前端配置**: 在 `src/router/index.js` 中配置路由: ```javascript { path: 'example', name: 'Example', component: () => import('@/views/example/index.vue'), meta: { title: '示例菜单', icon: 'example' }, props: route => ({ id: route.query.id }) } ``` 3. **传递参数**: 在前端页面中,可以通过路由参数传递 `id`。例如,在菜单点击事件中: ```javascript this.$router.push({ path: '/example', query: { id: 123 } }); ``` ### 3. 页面接收参数 在 `example.vue` 页面中,可以通过 `props` 接收参数: ```vue <template> <div> <h1>示例页面</h1> <p>接收到的参数:{{ id }}</p> </div> </template> <script> export default { props: ['id'], mounted() { console.log('接收到的参数:', this.id); } } </script> ``` ### 注意事项 - 确保 `path` 和 `component` 字段正确配置。 - 使用 `props` 接收参数时,确保前后端配置一致。 - 传递参数时,可以通过 `query` 或 `params` 进行传递,具体根据需求选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值