Android代码规范----一位2年外包开发者的心声

android开发项目app实例!我在华为做Android外包的真实经历!深度好文 都说Android最近行情不好,很多人都遇到瓶颈或放弃或转行。其实这种情况17年18年也是如此,相对比之下,个人认为今年比去年好多了,Android接下来将会走向复苏的春天。 自从Google开始推出AMP项目已经有一年了。除此之外,最近,Google宣布将有一个单独的移动web搜索索引。这革命性一步完全改变了移动app开发趋势,特别是从SEO和web app的角度。加速移动页面AMP改变web app 不正是说明android时代在慢慢变好吗? 面试题 一般Android面试分为两部分:Java部分. 阅读详情

下面文章由于编译器排版问题可能导致错行,看格式化的请移步至我的github
github
里面有一个文件叫”Android代码规范”。


代码规范:(源文件编码格式为 UTF-8)
1.区块划分:

1.1 建议使用注释将源文件分为明显的区块,区块划分如下:
    1.常量声明区
    2.UI控件成员变量声明区
    3.普通成员变量声明区
    4.内部接口声明区
    5.初始化相关方法区
    6.事件响应方法区
    7.普通逻辑方法区
    8.重载的逻辑方法区
    9.发起异步任务方法区
    10.异步任务回调方法区
    11.生命周期回调方法区(出去onCreate()方法)
    12.内部类声明区

1.2 类成员排列通用规则:
    1.按照发生的先后顺序排列
    2.常量按照使用先后排列
    3.UI控件成员变量按照layout文件中的先后顺序排列
    4.普通成员变量按照使用的先后顺序排列
    5.方法基本上都按照调用的先后顺序在各自区块中排列
    6.相关功能作为小区块放在一起(或者封装掉)

1.3 重载:永不分离
    当一个类有多个构造函数,或是多个同名方法,这些函数/方法应该按顺序出现在一起,中间不要放进其它函数/方法。

2.关于换行:

1.格式化代码
2.if else do while for 就算是有一个语句也要加大括号
3.逗号,等于号后换行,'.','&','|'前换行

3.命名:

3.1 不要组合声明,如:int a,b;要分开,像这样
    int a;
    int b;

3.2 包名
    包名全部小写,连续的单词只是简单地连接起来,不使用下划线。
    采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名为xx(可以是公司或则个人的随便),三级包名根据应用进行命名,四级包名为模块名或层级名。

    3.2.1:按照模块划分:
        包名                                                      此包中包含
        com.xx.应用名称缩写.activity                              页面用到的Activity类 (activitie层级名用户界面层)
        com.xx.应用名称缩写.base                                  基础共享的类
        com.xx.应用名称缩写.adapter                               页面用到的Adapter类 (适配器的类)
        com.xx.应用名称缩写.util                                  公共工具方法类(util模块名)
        com.xx.应用名称缩写.bean                                  下面可分:vo、po、dto 此包中包含:JavaBean类
        com.xx.应用名称缩写.model                                 模型类
        com.xx.应用名称缩写.db                                    数据库操作类
        com.xx.应用名称缩写.view(或者 com.xx.应用名称缩写.widget) 自定义的View类等
        com.xx.应用名称缩写.service                               Service服务
        com.xx.应用名称缩写.receiver                              BroadcastReceiver服务
        注意:如果项目采用MVP,所有M、V、P抽取出来的接口都放置在相应模块的i包下,所有的实现都放置在相应模块的impl下

    3.2.2:按照功能划分:(以MVP为例)
        包名                                                     此包中包含
        com.xx.app                                              所有的功能
            com.xx.app.xxxx(功能1)                             功能1
                com.xx.app.xxxx.presenter                       IXxxPresenter XxxPresenterImpl
                com.xx.app.xxxx.model                           IXxxModel XxxModelImpl XxxModel
                com.xx.app.xxxx.view                            IXxxVView XxxViewImpl XxxActivity XXXFragment XxxAdapter
        com.xx.base                                             基础共享的类(BaseActivity)
        com.xx.util                                             公共工具方法类(TimeUtils)
        com.xx.db                                               数据库操作类
        com.xx.view(或者com.xx.widget)                         自定义view
        com.xx.service                                          Service
        com.xx.receiver                                         BroadcastReceiver
        com.xx.provider                                         ContentProvider
        com.xx.common

3.3 类名(大驼峰。e.g. FirstActivity)

    3.3.1接口:IXxx,实现类:XxxImpl。或者接口:Xxxable/Xxxible,实现类:XxxableImpl/XxxibleImpl
    3.3.2静态类:AbsXxx,实现类:同普通类
    3.3.3普通类:Xxx
    3.3.4枚举类:EnumXxx
    3.3.5注解类:Xxx
    3.3.6其他:同普通类
    3.3.7具体来讲:
        类                 描述                                                            例如
        Activity 类        Activity为后缀标识                                             欢迎页面类WelcomeActivity
        Adapter类          Adapter 为后缀标识                                             新闻详情适配器 NewDetailAdapter
        解析类           Parser为后缀标识                                               首页解析类HomePosterParser
        工具方法类         Util或Manager为后缀标识(与系统或第三方的Utils区分)或功能+Util        线程池管理类:ThreadPoolManager日志工具类:LogUtil(Logger也可)打印工具类:PrinterUtil
        数据库类              以DBHelper后缀标识                                             新闻数据库:NewDBHelper
        Service类          以Service为后缀标识                                             时间服务TimeServiceBroadcast
        Receiver类         以Receiver为后缀标识                                            推送接收JPushReceiver
        ContentProvider   以Provider为后缀标识    
        自定义的共享基础类  以Base开头                                                      BaseActivity,BaseFragment
        测试类            测试的类的名称开始,以Test结束                                    HashTest 或 HashIntegrationTest

3.4 方法名(小驼峰。e.g.firstMethod)

    方法                      说明
    initXX()                初始化相关方法,使用init为前缀标识,如初始化布局initView()
    isXX() checkXX()        方法返回值为boolean型的请使用is或check为前缀标识
    getXX()                 返回某个值的方法,使用get为前缀标识
    handleXX()              对数据进行处理的方法,尽量使用handle为前缀标识
    displayXX()/showXX()    弹出提示框和提示信息,使用display/show为前缀标识
    saveXX()                与保存数据相关的,使用save为前缀标识
    resetXX()               对数据重组的,使用reset前缀标识
    clearXX()               清除数据相关的
    removeXXX()             清除数据相关的
    drawXXX()               绘制数据或效果相关的,使用draw前缀标识

3.5 字段名

    3.5.1 常量:全部字母大写,用下划线分隔单词。
          首先明确一点,final修饰的一定是常量。但是如果他的可观察状态可以改变,那么他就不是一个常量。

    3.5.2 非常量:小驼峰。e.g.firstField
          非公有,非静态字段命名以m开头。                              private int mPrivate;  protected int mProtected; 
          静态字段命名以s开头。                                       private static MyClass sSingleton;  
          公有非静态字段命名以p开头。                                  public int pField; 
          公有静态字段(全局变量)命名以g开头。                         public static int gField; 
    注意:public static final 字段(常量) 全部大写,并用下划线连起来。

    3.5.3 参数名:小驼峰

3.6 资源文件名
    3.6.1 资源布局文件(XML文件(layout布局文件)):
        3.6.1.1 contentview 命名必须以全部单词小写,单词间以下划线分割,使用名词或名词词组。所有Activity或Fragment的contentView必须与其类名对应,对应规则为:
              将所有字母都转为小写,将类型和功能调换(也就是后缀变前缀)。
              例如:activity_main.xml

        3.6.1.2 Dialog命名:dialog_描述.xml
              例如:dialog_hint.xml

        3.6.1.3 PopupWindow命名:ppw_描述.xml
              例如:ppw_info.xml

        3.6.1.4 列表项命名:item_描述.xml
              例如:item_city.xml

        3.6.1.5 包含项命名:模块_(位置)描述.xml
              例如:activity_main_head.xml、activity_main_bottom.xml
              注意:通用的包含项命名采用:项目名称缩写_描述.xml
              例如:xxxx_title.xml

    3.6.2 资源文件(图片drawable文件夹下):

        全部小写,采用下划线命名法,加前缀区分
        命名模式:可加后缀 _small 表示小图, _big 表示大图,逻辑名称可由多个单词加下划线组成,采用以下规则:
            用途_模块名_逻辑名称
            用途_模块名_颜色
            用途_逻辑名称
            用途_颜色
            说明:用途也指控件类型(具体见UI控件缩写表)
            例如:
            btn_main_home.png 按键
            divider_maket_white.png 分割线
            ic_edit.png 图标
            bg_main.png 背景
            btn_red.png 红色按键
            btn_red_big.png 红色大按键
            ic_head_small.png 小头像
            bg_input.png 输入框背景
            divider_white.png 白色分割线

            如果有多种形态如按钮等除外如 btn_xx.xml(selector)

            名称                                  功能
            btn_xx                              按钮图片使用btn_整体效果(selector)
            btn_xx_normal                       按钮图片使用btn_正常情况效果
            btn_xx_pressed                      按钮图片使用btn_点击时候效果
            btn_xx_focused                      state_focused聚焦效果
            btn_xx_disabled                     state_enabled (false)不可用效果
            btn_xx_checked                      state_checked选中效果
            btn_xx_selected                     state_selected选中效果
            btn_xx_hovered                      state_hovered悬停效果
            btn_xx_checkable                    state_checkable可选效果
            btn_xx_activated                    state_activated激活的
            btn_xx_windowfocused                state_window_focused
            bg_head                             背景图片使用bg_功能_说明
            def_search_cell                     默认图片使用def_功能_说明
            ic_more_help                        图标图片使用ic_功能_说明
            seg_list_line                       具有分隔特征的图片使用seg_功能_说明
            sel_ok                              选择图标使用sel_功能_说明

    3.6.3 动画文件(anim文件夹下):

        全部小写,采用下划线命名法,加前缀区分。
        具体动画采用以下规则:
        模块名_逻辑名称
        逻辑名称
        refresh_progress.xml
        market_cart_add.xml
        market_cart_remove.xml
        普通的tween动画采用如下表格中的命名方式
        // 前面为动画的类型,后面为方向

        动画命名例子                  规范写法
        fade_in                     淡入
        fade_out                    淡出
        push_down_in                从下方推入
        push_down_out               从下方推出
        push_left                   推向左方
        slide_in_from_top           从头部滑动进入
        zoom_enter                  变形进入
        slide_in                    滑动进入
        shrink_to_middle            中间缩小

    3.6.4 values中name命名:
        类别              命名                                                                          示例
        strings         strings的name命名使用下划线命名法,采用以下规则:模块名+逻辑名称                  main_menu_about 主菜单按键文字friend_title 好友模块标题栏friend_dialog_del 好友删除提示login_check_email 登录验证
                                                                                                    dialog_title    弹出框标题
                                                                                                    button_ok       确认键 loading 加载文字
        colors          colors的name命名使用下划线命名法,采用以下规则:模块名+逻辑名称 颜色                friend_info_bg friend_bg transparent gray
        styles          styles的name命名使用 Camel命名法,采用以下规则:模块名+逻辑名称                    main_tabBottom

    3.6.5 layout中的id命名
          命名模式为:view缩写_view的逻辑名称

<附录>

表1 UI控件缩写表

控件                  缩写          例子
LinearLayout        ll          llFriend或者mFriendLL
RelativeLayout      rl          rlMessage或mMessageRL
FrameLayout         fl          flCart或mCartFL
TableLayout         tl          tlTab或mTabTL
Button              btn         btnHome或mHomeBtn
ImageButton         ibtn        btnPlay或mPlayIBtn
TextView            tv          tvName或mNameTV
EditText            et          etName或mNameET
ListView            lv          lvCart或mCartLV
ImageView           iv          ivHead或mHeadIV
GridView            gv          gvPhoto或mPhotoGV


表2 常见的英文单词缩写:

名称                      缩写
icon                    ic(主要用在app的图标)
color                   cl(主要用于颜色值)
divider                 di(主要用于分隔线,不仅包括Listview中的divider,还包括普通布局中的线)
selector                sl(主要用于某一view多种状态,不仅包括Listview中的selector,还包括按钮的selector)
average                 avg
background              bg(主要用于布局和子布局的背景)
buffer                  buf
control                 ctrl
delete                  del
document                doc
error                   err
escape                  esc
increment               inc
infomation              info
initial                 init
image                   img
Internationalization    I18N
length                  len
library                 lib
message                 msg
password                pwd
position                pos
server                  srv
string                  str
temp                    tmp
window                  wnd(win)

参考:
google官方
国内翻译

2020年,阿里、腾讯、爱奇艺等大厂Android面试经验谈 前言 2020年是转折的一年,但是也有不少收获。趁着金九银十大家都在找工作,先分享一下offer的情况。 阿里高德(offer) 爱奇艺(offer) 腾讯视频(offer) 小米(被拒) 今日头条(被拒) 感想 在面试的过程中我深深的感受到,对于一个优秀的安卓开发来说,首先摆在第一位的还是他/她作为一个软件工程师的基本素养。 无论你是做前端还是后端,最后定义你的优秀程度的还是作为软件工程师的基本素养,学习能力和编程能力,还有设计能力。 下面大致分享一下各个公司的面试题目 爱奇艺 Android消息机. 阅读详情

相关推荐

【企业管理】【管理科学】企业全岗位综合运营与组织知识矩阵体系01

岗位类别核心职责工作内容(详细)协作模式协商焦点博弈策略信任建立机制序列化工作流程关键绩效指标研发类​技术创新与产品开发1.需求分析:R=f(U,M,T) 2.概念设计:C=D(S,B) 3.原型开发 4.测试验证 5.文档编写敏捷团队、跨功能协作技术方案、资源分配、优先级纳什均衡:ui​(si​,s−i​)≥ui​(si′​,s−i​)代码审查、技术分享、结果透明瀑布模型/敏捷迭代1.专利数量P 2.技术就绪度TRL 3.缺陷密度D<0.1/KLOC其中:U=用户需求,

weixin_49199313的博客 745

一名来自阿里Android外包的真实情况与个人感受

对于一些初级的程序员来说,通过在外包公司工作积累经验,可以将其作为跳板,为将来进入更大的公司或团队做准备。而对于有经验的程序员来说,外包公司提供的项目和技能多样化,也有助于他们寻找更合适的工作机会。但是,如果你希望有一个更好的工作环境和发展前景,可能需要考虑其他的途径。同时,由于外包工作通常具有较大的灵活性,程序员可以根据自己的兴趣和需求调整工作内容和时间,实现工作与生活的平衡。例如,能接触到更多的项目,接触到公司内部的全流程工具和平台,能够扩宽自己的知识面,并且在代码审核方面会比一般的公司更加严格。

大模型学习路线 1153

app代码规范,

app代码规范,

我为何一直强调外包公司别去

「 不是针对外包 」我为何一直对外包公司如此大的怨念?其实不是,外包公司也是公司,也是凭本事和技术挣钱,无论在道德、心理、合法性层面都没有任何意义的客观错误。之所以我总给...

前端你别闹 10万+

Android代码-外包项目聚合信息

外包集中营 整合多个软件外包平台项目信息,替你筛选优质项目 关于我们 功能 首页 展示你关注的外包信息,比如: 移动app、网站开发、微信/小程序。 发现 展示所有的外包信息。 搜索 展示标题或描述中含有指定关键词的外包信息。 截图 下载 已在 百度手机助手、91市场、安卓市场 上线。 贴出二维码方便下载 技术点 框架:MVP 网络访问:Retrofit2 OkHttp3 网络缓存:RxCache 数据及解析:Gson 解析 json 异步框架:RxJava2 设计规范:Material Design 界面布局:BottomNavigationView ViewPager Fragment 第三方接入:ShareSdk、友盟 app 统计、TinkerPatch 热更新 亮点 ViewPager 懒加载:在 Activity 生命周期内仅加载一次,且第一次可见时加载。 LCEE 界面逻辑:也就是加载、内容、错误、空视图。 项目包结构 com.ittianyu.pocenter common            公用代码 a

【科技前沿】用深度强化学习优化电网,让电力调度更聪明!

Hey小伙伴们,今天我要跟大家分享一个超级酷炫的技术应用——深度强化学习在电网优化中的典型案例!如果你对机器学习感兴趣,或是正寻找如何用AI技术解决实际问题的方法,这篇分享绝对不容错过!👩‍💻✨

Jacklx888的博客 3247

android游戏开发!记一次字节跳动Android社招面试,全网疯传

珍藏版(1)——高级 UI 晋升 第一节、触摸事件分发机制 前言 简介 被分发的对象 分发事件的组件 List item 分发的核心方法 事件分发过程 总结 第二节、View 渲染机制 1、为什么是 16ms 2、为什么 16ms 没完成绘制就会卡顿 3、渲染原理 4、过度绘制(overdraw)*检测. 5、Overdraw 的处理方案 6、减少不必要的层次:巧用 Hierarchy Viewer 第三节、常用 View 1、RecycleView 2、CardVi

weixin_52308504的博客 842

Cadence仿真笔记(二):传统noise仿真—共源极的噪声

cadence中进行传统噪声仿真

Bao_xue的博客 1万+

谈Android外包项目

这个学期接了几个Android的外包项目来做。让我深深的体会到:讨厌的并不是写代码,是客户!     常常会遇到一种情况是东西按照之前的需求来做了,就在程序员认为项目快完成的时候,客户提出有需求要修改。这时候程序员的心里有一个声音,“TMD,你又不早说!”没办法,只好改呗。如果之前的项目的框架都设计得好,方便以后扩展维护的,那么需求修改的影响也不会特别大。如果项目的框架没形成,又或者

青春的光与影 4861

【科研导航】【计算机视觉与图像处理】从顶刊到潜力股:跨学科(电子/电气/信息)SCI期刊投稿全景图

本文全面解析了计算机视觉与图像处理领域的SCI期刊投稿策略,涵盖从顶刊到潜力股的各类期刊特点。重点介绍了IEEE Transactions系列、Elsevier旗舰期刊以及二区优质期刊的审稿偏好和投稿技巧,特别适合电子/电气/信息交叉学科的研究者。文章还提供了三区、四区期刊的实用投稿建议,帮助科研新手快速找到适合的发表平台。

weixin_30897233的博客 83

Mac新手必看:nvm安装全攻略(含常见错误解决方案)

本文为Mac开发者提供nvm安装与使用全攻略,涵盖环境准备、安装步骤、Shell配置优化及常见错误解决方案。详细讲解如何利用nvm管理多Node版本,提升开发效率,特别针对国内用户提供网络问题解决技巧,是Mac新手必备的Node版本管理指南。

weixin_28839699的博客 1619

与外包人员合作时,如何管理代码?

为什么80%的码农都做不了架构师?>>> ...

weixin_34062329的博客 1876

【笔记】使用OrCAD对电路进行蒙特卡洛分析和最坏分析

使用OrCAD对电路进行蒙特卡洛分析和最坏分析

fang_dz999的博客 3151

2020年Android开发实战!原生Android开发的路该怎么走?面试心得体会

前言 上回承诺过大家,一定会出 HTTP 的系列文章,今天终于整理完成了。作为一个 web 开发,HTTP 几乎是天天要打交道的东西,但我发现大部分人对 HTTP 只是浅尝辄止,对更多的细节及原理就了解不深了,在面试的时候感觉非常吃力。这篇文章就是为了帮助大家树立完整的 HTTP 知识体系,并达到一定的深度,从容地应对各种灵魂之问,也同时提升自己作为一个 web 开发的专业素养吧。这是本文的思维导图: 下面分享一下各个公司的面试题目 爱奇艺 Android消息机制 Android View绘制流程,当一

m0_52308677的博客 545

SPEI计算避坑指南:gma中Distribution和FitMethod参数怎么选?

本文深入探讨了在SPEI计算中如何科学选择gma库中的Distribution和FitMethod参数,帮助研究者避开常见陷阱。详细分析了LogLogistic、Gamma和Pearson3三种分布的适用场景,以及LMoment与MLE拟合方法的优缺点,为气象干旱研究提供实用指南。

weixin_30308101的博客 254

基于 MATLAB BP 神经网络的财务预测

通过基于 MATLAB BP 神经网络的财务预警模型,我们可以对企业的财务风险进行有效地识别和预测。在具体实现过程中,需要注意对财务数据的预处理、模型参数的调整以及结果的解释等问题。MLP模型的输入层、输出层和隐含层之间均为全连接,每个神经元都是上一层神经元的加权求和再加偏置后的非线性变换。其中,输入层接受财务数据,输出层输出财务预测结果,隐含层则对输入数据进行处理和抽象。其中,X’是标准化后的值,X是原始值,μ_i 和σ_i 分别是指标 i 在样本中的均值和标准差。其中,X’是标准化后的值,X是原始值。

TechPulseZ的博客 924

android开发模拟器!程序员如何自我学习和成长?快来收藏!

IT行业的前景 近几年来,大数据、人工智能AI、物联网等一些技术不断发展,也让人们看到了IT行业的繁荣与良好的前景。越来越多的高校学府加大了对计算机的投入,设立相应的热门专业来吸引招生。当然也有越来越多的人选择从事这个行业,希望能从这个行业中分得一杯羹。 AWTK 主要特色: 1、跨平台 AWTK 是跨平台的,这有两个方面的意思: AWTK 本身是跨平台的。目前支持的平台有 ZLG AWorks、Windows、Linux、MacOS、嵌入式 Linux、Android、Web 和嵌入式裸系统

m0_53537576的博客 614

LVGL(lv_table)

LVGL中的lv_table是一个轻量级表格控件,用于显示行列式文本数据。它支持设置单元格内容/样式、行列调整、事件响应等基础功能,适用于参数配置、数据展示等场景。通过API可快速创建表格,设置行列数、填充数据,并自定义对齐方式与样式。但需注意默认无滚动条、行数限制等问题。该控件适合简单表格需求,复杂交互需结合自定义事件处理。

m0_49476241的博客 1267

android开发项目外包,一共三个单子

寻求一开发合作者:Andriod应用程序开发要求:1.深圳本地 2.做特种设备与MID(安卓平台)连接应用控制程序 3.个人工程师http://www.apkbus.com/android-44160-1-1.html 项目外包,最好北京周边做一个手机查询系统,用户登录后,查询相关数据,并用图表展示,开发工期2个礼拜,可以本地开发,也可过来开发,外包金额面议,有意者详谈。ht...

weixin_33994444的博客 494

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 两个Activity无缝上下切换的思路。
下一篇: android 5.0.X上实用SVG,其中包含科学计数法时出现crash
DreamCarMustang
博客等级 码龄12年 10粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值