简介:
每个 Android 开发者,几乎都有自身的项目编写规范,好坏在平常的开发时或许难看得出来,一旦涉及到项目维护更新或项目交接开发,是神是鬼,一下便原形毕露。低劣的编写规范会导致项目维护更新成本变大,所交接的人员不愿在此基础上进行操作等。于是,这些项目往往不久后都会进入重构阶段,甚至于放弃目前项目,进行重写。为了避免这些情况的发生,本文总结了几点良好的项目编写规范,可以以此作为参考从而更改自身的编写规范,将恶魔扼杀于摇篮中。
(总结《App研发录》第一章(重构,夜未眠))
目录:
重新规划 Android 项目结构
- 将业务无关的逻辑转移到 AndroidLib 中,然后主项目保持对 AndroidLib 的引用。
- AndroidLib 的项目结构至少包含以下五大部分:
- activity:存放与业务无关的 Activity 基类。
- net:网络底层封装。
- cache:缓存数据和图片的相关处理。
- ui:自定义控件。
- utils:各种与业务无关的公用方法。
- 主项目可以划分为以下包:
- activity:按模块进行拆分,将不同模块的 Activity 划分到不同的包下。
- adapter:适配器。
- entity:实体类。
- db:SQLite 相关逻辑的封装。
- engine:业务相关的类。
- ui:自定义控件。
- utils:公用方法。
- interfaces:接口,命名以 I 作为开头。
- listener:基于 Listener 的接口,命名以 On 作为开头。
为 Activity 定义新的生命周期
在 BaseActivity 中重写 onCreate 方法,将其分为:
- initVariables:初始化变量,包含 Intent 带的数据和 Activity 内的变量。
- initViews:加载 layout 布局文件,初始化控件,为控件挂上事件监听。
- loadData:联网获取数据。
实体化编程
- 使用 fastJSON 或 GSON 将后台返回的数据解析成实体,要以实体对象进行数据操作,不可对 JSON 数据进行手动取值或将 JSONObject 进行页面传递。
- 使用工具将 JSON 数据转化为实体类,便于实体类的编写。
- 在页面中使用实体进行跳转,避免使用全局变量,若必须使用全局变量,一定要将其序列化到本地中,当全局变量被回收时,能够从本地文件中恢复。
Adapter 模板
- 创建 BaseAdapter,并且对于每个自定义的 Adapter,都要实现以下方法:
- getCount()
- getItem()
- getItemId()
- getView()
- 使用 ViewHolder 机制进行控件复用
类型安全转换函数
-
不可直接进行类型转换,如:
int result = Interger.valueof(obj.toString());
会导致以下问题:
- 未判断 obj 是否为空,有可能出现空指针错误
- 未对
obj.toString()
进行.trim()
处理,有可能出现空格 - 未对
obj.toString()
进行判断,有可能导致其里面包含非数字相关字符,从而导致转换出错。
-
不可直接执行 substring 函数,需要判断 start 和 end 有没有越界。