开发一个Android应用之前,应该考虑点什么?

开发一个Android应用之前,应该考虑点什么?

本文原创,转载请注明出处。
欢迎关注我的 简书 ,关注我的专题 Android Class 我会长期坚持为大家收录简书上高质量的Android相关博文。

开心一刻

写在前面:

昨天参加了秋百万大大组织的北京GDG活动,收获颇丰。又跟几个有写作习惯的朋友建立了一个“神秘组织”,每两周为一个周期,每人都会产出一篇原创的文章,互相校验和探讨,意在督促组员之间学习和分享开源技术。而简书上的平台就交给我维护了,不出意外,几天之内大家就可以看到我们的主页和第一期成员的文章啦,敬请期待~

前几天接手了一个老员工遗留下来的代码,别提多痛苦了,甚至有了让我推倒重写的冲动,很多地方的设计问题颇多,老大也快无法忍受了。。。上学的时候写一篇作文,要想好主题立意和分段,解数学题的时候也得在草稿纸上梳理清楚逻辑之后再下笔。其实开发一个Android也应是如此,不做准备,埋头苦写,最后会导致问题颇多。所以本文会根据网络上优秀内容和我实际的开发经验讨论总结一下,开发一个Android应用之前,都应该做哪些准备

编码规范

编码规范的问题是我最先想强调的,因为我接手的项目命名就极其混乱,甚至在一个类中的命名都没有统一化(生无可恋脸)。代码可能不是你自己一个人写,保证代码可读性是非常必要的。而规范存在的意义就是淡化每个人的习惯而达到统一。不多说,下面就介绍Android的编码规范

  • 除了注释,代码中不出现中文
  • 每个类写上必要的注释,类的说明,作者,联系方式
  • 方法加上必要的注释说明,方便以后维护

包管理

  • base:存放基础类的包,里面的类以Base为前缀,例如BaseActivity;
  • activity:存放activity的包,每个activity命名以Activity结尾,例如MainActivity;
  • fragment:存放fragment的包,每个fragment命名以Fragment结尾,例如ChatFragment;
  • receiver:存放receiver的包;
  • service:存放service的包;
  • adapter:存放adapter的包,每个adapter命名以Adapter结尾,例如EventItemAdapter;
  • common:存放一些公共常量,例如后端接口、SharedPreferenceKey、IntentExtra等;
  • utils:存放工具类的包,比如常见的工具类:LogUtils、DateUtils;
  • entity:存放实体类的包;
  • widget:存放自定义View的包;

以上是一些常见的包,但不局限于此,视项目的具体情况而定。

命名

大驼峰命名(UpperCamelCase):每个单词的第一个字母都大写。

小驼峰命名(lowerCamelCase):除第一个单词以外,每一个单词的第一个字母大写。

命名的基本原则:

  • 尽可能地使用统一的命名规范;
  • 不使用汉语拼音;
  • 除了常见的英文缩写,尽量少地使用缩写;

包命名

  • 小写字母,参见上文包管理;
  • 连续的单词直接连接起来,不使用下划线;

Java类命名

  • 大驼峰命名 UserListAdapter;
  • 除常见的缩写单词以外,不使用缩写,缩写的单词每个字母都大写 RequesURLList;
  • 公共的工具类建议以Utils、Manager为后缀,如LogUtils;
  • 接口命名遵循以上原则,以able或ible为后缀;

变量命名

  • 成员变量命名
  • 小驼峰命名;
  • 不推荐使用谷歌的前面加m的编码风格(如果使用团队中使用m,则统一使用);
  • 常量命名
  • 单词每个字母均大写;
  • 单词之间下划线连接;
  • 控件变量命名
  • 小驼峰命名;
  • 建议使用 控件缩写+逻辑名称 格式,例如 tvPostTitle、etUserName;
  • 对应的控件的id的命名控件缩写_逻辑名称,单词均小写,用下划线连接,例如:tv_post_title、
  • et_user_name;
  • 常见的控件缩写如下:
    控件 缩写
    Linearlayout ll
    RelativeLayout rl
    TextView tv
    EditText et
    Button btn
    ImageView iv
    CheckBox chb
    ListView lv
    GridView gv
    RadioButton rb

方法命名

  • 小驼峰命名;
  • Getter和Setter方法,推荐使用自动生成的,写起来也很方便。注意,bool类型的变量Getter方法写成isTrue这种;
  • 方法名应当保证见名知义的原则,尽量不使用or或者and,遵循“do one thing”原则;

布局文件命名

  • activity、fragment布局文件名以对应的类别名称为前缀,逻辑名称放在其后,以下划线连接,例如activity_home、fragment_chat_list,方便查找;
  • ListView、GridView的item布局文件建议以list_item、gird_item为前缀,加上对应的逻辑名称,例如
    list_item_post、grid_item_photo;
  • Dialog的布局文件以dialog为前缀,逻辑名称放在其后,下划线连接,例如dialog_warnning;
    包含项布局命名以include开头,在加上对应的逻辑名称,例如include_foot
  • 控件的id命名参见控件变量命名;

资源命名

  • 图标资源以ic为前缀,例如ic_chat,指聊天图标;
  • 背景图片以bg为前缀,例如bg_login,指的是登录页的背景图;
  • 按钮图片以btn为前缀,例如btn_login,指的是登录按钮的图片,不过这只有一种状态,需要加上状态的可以在后面添加,例如btn_login_pressed,表示登录按钮按下的图片;
  • 当使用shape和selector文件为背景或者按钮时,命名参照以上说明;

项目架构

项目框架
一个好的项目架构可以降低项目的复杂性,并且易扩展、易维护,耦合低,结构清晰,功能内聚。
MVCMVPMVVM还有一些设计模式,结合你app的业务,自行选择一个最合适的一条路走到黑,建议不要“混搭”。

开源框架

开源框架的选择分两大类,一是权威性毫无争议,放心选择的这类帮助我们快速开发的,比如:

  • 网络 Retrofit + OkHttp+ RxJava、Volley、android-async-http
  • 依赖注入 Dagger2、ButterKnife、RoboGuice
  • 事件总线 otto、EventBus
  • 图片加载 Fresco、Glide、Picasso
  • 数据库 GreenDao、Ormlite、LitePal
  • 日志输出 logger、LogUtils
  • 当然不能忘了Google提供的兼容support全家桶

还有一类框架虽然不是毫无争议,但是也能极大节省我们的时间,提升开发效率,对于这类项目,要在Github上长期淘宝了。找那种star很多,issues解决很快,长期维护的项目,这种坑会比较少。

代码细节

抽取基类
即使目前你没有需要,也一定要抽取一个BaseActivity和BaseFragment,因为早晚会用到,切记!
比如:

public abstract class BaseActivity extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        init();
    }

    private void init() {
        setContentView(R.layout.activity_main);
        initView();
        initData();
        initListener();
    }

    /**
     * 初始化布局
     */
    protected abstract void initView();

    /**
     * 初始化数据
     */
    protected  abstract void initData();

    /**
     * 初始化侦听
     */
    protected abstract void initListener();

}

BaseFragment也同理,随着业务的增加和抽象,基类会继续扩展。其实不仅仅是BaseActivityBaseFragment,如果你一个业务模块中有很多相似和相同的逻辑,也可以抽取一个BaseXXX这是非常好的一个习惯。

还有一些建议,不做展开,大家请自行搜索:

  • Android Studio上好用的插件
  • selector
  • 图片的.9处理
  • Resources xml文件中,记得用注释分割每个类用到的资源,建议不共用
  • 慎用static关键字
  • 定期code review,不断代码重构

性能优化

推荐一个我曾经写过的总结:

Android性能优化总结

写在后面:

本文做了一个初步总结,未来会慢慢扩展和完善,如果有遗漏,大家可以补充~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容