Android开发简要编码规则详解

 更新时间:2016年9月20日 19:59  点击:2247
下文给各位整理了一些Android开发简要编码规则详解,希望能帮助到大家。

请使用 UTF-8 格式来查看代码,避免出现中文乱码。
至于注释应该使用中文还是英文,请自己行决定,根据公司或项目的要求而定,推荐使用英文。

1. 整理代码
1.1. Java 代码中不允许出现警告,无法消除的警告要用 @SuppressWarnings。
1.2. 去掉无用的包、方法、变量等,减少僵尸代码。
1.3. 使用 Lint 工具来查看并消除警告和错误。
1.4. 使用 Ctrl+Shift+F 来格式化代码,然后再进行调整。
1.5. 使用 Ctrl+Shift+O 来格式化 Import 包。
2. 命名规则
2.1. 基本原则
2.1.1. 变量,方法,类命名要表义,严格禁止使用 name1, name2 等命名。
2.1.2. 命名不能太长,适当使用简写或缩写。(最好不要超过 25 个字母)
2.1.3. 方法名以小写字母开始,以后每个单词首字母大写。
2.1.4. 避免使用相似或者仅在大小写上有区别的名字。
2.1.5. 避免使用数字,但可用 2 代替 to,用 4 代替 for 等,如 go2Clean。
2.2. 类、接口
2.2.1. 所有单词首字母都大写。使用能确切反映该类、接口含义、功能等的词。一般采用名词。
2.2.2. 接口带 I 前缀,或able, ible, er等后缀。如ISeriable。
2.3. 字段、常量
2.3.1. 成员变量以 m 开头,静态变量以 s 开头,如 mUserName, sInstance。
2.3.2. 常量全部大写,在词与词之前用下划线连接,如 MAX_NUMBER。
2.3.3. 代码中禁止使用硬编码,把一些数字或字符串定义成常用量。
2.3.4. 对于废弃不用的函数,为了保持兼容性,通常添加 @Deprecated
3. 注释
请参考 下面示例类的注释。

4. Class 内部顺序和逻辑
4.1. 每个 class 都应该按照一定的逻辑结构来排列基成员变量、方法、内部类等, 从而达到良好的可读性。
4.2. 总体上来说,要按照先 public, 后 protected, 最后 private, 函数的排布 也应该有一个逻辑的先后顺序,由重到轻。
4.3. 以下顺序可供参考:
定义TAG,一般为 private(可选)
定义 public 常量
定义 protected 常量、内部类
定义 private 变量
定义 public 方法
定义 protected 方法
定义 private 方法
5. 表达式与语句
5.1. 基本原则:采用紧凑型风格来编写代码
5.2. 细则请参见示例类CodingRuler

 代码如下 复制代码
/**
 * 文件名(可选),如 xxx.java
 *
 * 版本信息(可选),如:@version 1.0.0
 *
 * 版权申明(开源代码一般都需要添加),如:Copyright (C) 2010-2014 xxx Corporation.
 */
package com.ntes.ruler;
 
/**
 * 类的大体描述放在这里。
 *
 *
 * @author 作者名
 * @since 2014-XX-XX
 */
 
@SuppressWarnings("unused")
public class CodingRuler {
 
    /** 公有的常量注释 */
    public static final String ACTION_MAIN = "android.intent.action.MAIN";
 
    /** 私有的常量注释(同类型的常量可以分块并紧凑定义) */
    private static final int MSG_AUTH_NONE = 0;
    private static final int MSG_AUTH_SUCCESS = 1;
    private static final int MSG_AUTH_FAILED = 2;
 
    /** 保护的成员变量注释 */
    protected Object mObject0;
 
    /** 私有的成员变量 mObject1 注释(同类型的成员变量可以分块并紧凑定义) */
    private Object mObject1;
    /** 私有的成员变量 mObject2 注释 */
    private Object mObject2;
    /** 私有的成员变量 mObject3 注释 */
    private Object mObject3;
 
    /**
     * 对于注释多于一行的,采用这种方式来 定义该变量
     */
    private Object mObject4;
 
    /**
     * 公有方法描述...
     *
     * @param param1
     *            参数1描述...
     * @param param2
     *            参数2描述...
     * @param paramXX
     *            参数XX描述... (注意:请将参数、描述都对齐)
     */
    public void doSomething(int param1, float param2, String paramXX) {
        // 以下注释标签可以通过Eclipse内置的Task插件看到
        // TODO 使用TODO来标记代码,说明标识处有功能代码待编写
        // FIXME 使用FIXME来标记代码,说明标识处代码需要修正,甚至代码是
        // 错误的,不能工作,需要修复
        // XXX 使用XXX来标记代码,说明标识处代码虽然实现了功能,但是实现
        // 的方法有待商榷,希望将来能改进
    }
 
    /**
     * 保护方法描述...
     */
    @Deprecated
    protected void doSomething() {
        // ...implementation
    }
 
    /**
     * 私有方法描述...
     *
     * @param param1
     *            参数1描述...
     * @param param2
     *            参数2描述...
     */
    private void doSomethingInternal(int param1, float param2) {
        // ...implementation
    }
 
    /**
     * 条件表达式原则。
     */
    private void conditionFun() {
        boolean condition1 = true;
        boolean condition2 = false;
        boolean condition3 = false;
        boolean condition4 = false;
        boolean condition5 = false;
        boolean condition6 = false;
 
        // 原则: 1. 所有 if 语句必须用 {} 包括起来,即便只有一句,禁止使用不带{}的语句
        // 2. 在含有多种运算符的表达式中,使用圆括号来避免运算符优先级问题
        // 3. 判断条件很多时,请将其它条件换行
        if (condition1) {
            // ...implementation
        }
 
        if (condition1) {
            // ...implementation
        } else {
            // ...implementation
        }
 
        if (condition1) /* 禁止使用不带{}的语句 */
            condition3 = true;
 
        if ((condition1 == condition2) || (condition3 == condition4)
                || (condition5 == condition6)) {
 
        }
    }
 
    /**
     * Switch语句原则。
     */
    private void switchFun() {
 
        // 原则: 1. switch 语句中,break 与下一条 case 之间,空一行
        // 2. 对于不需要 break 语句的,请使用 /* Falls through */来标注
        // 3. 请默认写上 default 语句,保持完整性
        int code = MSG_AUTH_SUCCESS;
        switch (code) {
        case MSG_AUTH_SUCCESS:
            break;
 
        case MSG_AUTH_FAILED:
            break;
 
        case MSG_AUTH_NONE:
            /* Falls through */
        default:
            break;
        }
    }
 
    /**
     * 循环表达式。
     */
    private void circulationFun() {
 
        // 原则: 1. 尽量使用for each语句代替原始的for语句
        // 2. 循环中必须有终止循环的条件或语句,避免死循环
        // 3. 循环要尽可能的短, 把长循环的内容抽取到方法中去
        // 4. 嵌套层数不应超过3层, 要让循环清晰可读
 
        int array[] = { 1, 2, 3, 4, 5 };
        for (int data : array) {
            // ...implementation
        }
 
        int length = array.length;
        for (int ix = 0; ix < length; ix++) {
            // ...implementation
        }
 
        boolean condition = true;
        while (condition) {
            // ...implementation
        }
 
        do {
            // ...implementation
        } while (condition);
    }
 
    /**
     * 异常捕获原则。
     */
    private void exceptionFun() {
 
        // 原则: 1. 捕捉异常是为了处理它,通常在异常catch块中输出异常信息。
        // 2. 资源释放的工作,可以放到 finally 块部分去做。如关闭 Cursor 等。
        try {
            // ...implementation
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
 
        }
    }
 
    /**
     * 其它原则(整理中...)。
     */
    private void otherFun() {
        // TODO
    }
}

无觅相关文章插件,快速提升流量

由于Android的免费开源,使得Android手机快速占领市场,所以Android开发也如雨后春笋涌出,本人也想学学Android开发,所以在windows下找搭建个Android开发环境,不懂就问百度或Google,现在把搭建的过程写下做学习笔记,方便以后查看。

一、下载相应的文件

1.android-sdk-windows

下载地址:http://developer.android.com/sdk/index.html

2.Eclipse IDE for Java EE Developers

下载地址:http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr1

二、安装

1.将android-sdk-windows解压到E:Program Filesandroid-sdk-windows。

2.将Eclipse IDE for Java EE Developers解压到E:Program FilesEclipse。

3.配置Eclipse

打开Eclipse,Help->Install New Software->Add

Name=Android Development Tools (ADT)

Location=http://dl-ssl.google.com/android/eclipse/

当安装完ADT插件后,在Eclipse的window菜单下会多出一个Android SDK And AVD Manager菜单项,在这个里你可以管理你的“虚拟设备”和“SDK包”。

静默安装是在手机有了root权限之后使用静默安装给你手机安装软件了,这种安装方式手机没有任何提醒哦,下面来看一段代码。

android手机在获得root权限之后,可以调用命令的方式静默安装软件,这一点体验是很不错,但是目前网络上关于android静默安装app的代码均出自一人之手,其中有一个非常sb的bug,借用代码的人居然都没有发现,导致网络上几乎所有关于android app静默安装的代码都是错误的。

 代码如下 复制代码

new Thread() { 
    public void run() { 
    Process process = null; 
    OutputStream out = null; 
    InputStream in = null; 
    try { 
    // 请求root 
    process = Runtime.getRuntime().exec("su");  
    out = process.getOutputStream(); 
    // 调用安装 
    out.write(("pm install -r " + currentTempFilePath + "
").getBytes()); 
    in = process.getInputStream(); 
    int len = 0; 
    byte[] bs = new byte[256]; 
    while (-1 != (len = in.read(bs))) { 
        String state = new String(bs, 0, len); 
        if (state.equals("Success
")) { 
           //安装成功后的操作 
         } 
       } 
    } catch (IOException e) { 
        e.printStackTrace(); 
    } catch (Exception e) { 
        e.printStackTrace(); 
    } finally { 
        try { 
            if (out != null) { 
                out.flush(); 
                out.close(); 
            } 
            if (in != null) { 
                in.close(); 
            } 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
  } 
}.start();

这个代码实际上也可以运行起来,在root的手机中,也可以静默安装成功,但是代码有问题就是bug,不知道哪一天这个有问题的代码就会出现错误

下面是修改之后的代码,修改了上面的bug

 代码如下 复制代码

new Thread() {
    public void run() {
        Process process = null;
        OutputStream out = null;
        InputStream in = null;
        try {
            // 请求root
            process = Runtime.getRuntime().exec("su");
            out = process.getOutputStream();
            // 调用安装
            System.out.println(apkFile.getAbsolutePath());
            out.write(("pm install -r " + apkFile.getAbsolutePath() + "
").getBytes());
            in = process.getInputStream();
            int len = 0;
            int readLen = 0;
            byte[] bs = new byte[256];
            //读出所有的输出数据
            while (-1 != (readLen = in.read(bs))) {
                len = len + readLen;
                //如果读的数据大于缓存区。则停止
                if (len > bs.length) {
                    len -= readLen;
                    break;
                }
            }
            String state = new String(bs, 0, len);
            if (state.startsWith("Success")) {
            // 安装成功后的操作
            } 
             else {
                //静默安装失败,使用手动安装
                installByUser();
            } 
         } catch (IOException e) {
             e.printStackTrace();
         } catch (Exception e) {
            e.printStackTrace();
         } finally {
            try {
                if (out != null) {
                out.flush();
                out.close();
            }
            if (in != null) {
                in.close();
            }
            } catch (IOException e) {
            e.printStackTrace();
            }
        }
    }
}.start();

修改的地方就在于从输出流中读取输出数据,可以看出如果输出的数据大于缓存区大小(256),就会导致安装后的操作多次执行,上面这段错误的代码之所以可以运行,是在于输出流的输出为Success ,小于256,但是如果运行指令出错,返回一大推的错误,那么上面的那一段将读取所有的数据,读逐一进行比较。

iPhone6 plus来电闪光灯怎么设置呢,这个来电闪光灯功能默认是没有开启了,只有我们打开它之后才有这个功能,此功能也是非常的个性化的哦,下面一聚教程小编就为各位果粉介绍一下iPhone6 plus来电闪光灯设置方法吧。
1)这个我们在iPhone6 plus桌面点击设置然后再找到里边的【通用】之后再点击【辅助功能】。(如下图)
iPhone6 plus来电闪光灯设置方法图解 iPhone6 plus来电闪光灯设置方法图解
2)然后我们再点击【LED闪烁以示提醒】点击它开启了

iPhone6 plus来电闪光灯设置方法图解 iPhone6 plus来电闪光灯设置方法图解

好了到这里iPhone6 plus开关来电闪光灯教程就介绍到这里了,希望能帮助到各位。

下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。


在我安装、配置好PhoneGap项目的所有依赖后,试图执行

$ cordova run android

命令时,出现过如下错误。


Error: /home/sam/front/redwine/platforms/android/cordova/run: Command failed with exit code 8
    at ChildProcess.whenDone (/usr/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:135:23)
    at ChildProcess.EventEmitter.emit (events.js:98:17)
    at maybeClose (child_process.js:743:16)
    at Process.ChildProcess._handle.onexit (child_process.js:810:5)
view rawphonegapError hosted with ❤ by GitHub
cordova build android或cordova emulate android的结果也是一样。


但其实真正的问题在上面几行:

[aapt]     (skipping file '.jshintrc' due to ANDROID_AAPT_IGNORE pattern '.*')
     [aapt]     (skipping file '.bower.json' due to ANDROID_AAPT_IGNORE pattern '.*')
     [aapt]     (skipping file '.directory' due to ANDROID_AAPT_IGNORE pattern '.*')
     [aapt]       Unable to add '/home/sam/front/redwine/platforms/android/assets/www/bower_components/jquery-mobile/node_modules/grunt-bowercopy/node_modules/bower/node_modules/semver/semver.browser.js.gz': file already in archive (try '-u'?)
     [aapt] ERROR: unable to process assets while packaging '/home/sam/front/redwine/platforms/android/ant-build/wine.ap_'
     [aapt] ERROR: packaging of '/home/sam/front/redwine/platforms/android/ant-build/wine.ap_' failed
 
BUILD FAILED
/home/sam/bin/android-sdk-linux/tools/ant/build.xml:932: The following error occurred while executing this line:
/home/sam/bin/android-sdk-linux/tools/ant/build.xml:950: null returned: 1
view rawphonegapError2 hosted with ❤ by GitHub

这是因为项目下有多个node_modules目录,被重复打包而引发的Command failed with exit code 8问题。


解决办法是修改platforms/android/build.xml:

<property name="aapt.ignore.assets" value="&lt;dir&gt;node_*" />

将node_modules目录排除掉,就可以正常执行cordova命令。

[!--infotagslink--]

相关文章

  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • Android设置TextView竖着显示实例

    TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
  • vscode搭建STM32开发环境的详细过程

    这篇文章主要介绍了vscode搭建STM32开发环境的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-02
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20
  • Android 实现钉钉自动打卡功能

    这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
  • Android 开发之布局细节对比:RTL模式

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • Android开发之PhoneGap打包及错误解决办法

    下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
  • 安卓开发之Intent传递Object与List教程

    下面我们一起来看一篇关于 安卓开发之Intent传递Object与List的例子,希望这个例子能够为各位同学带来帮助。 Intent 不仅可以传单个的值,也可以传对象与数据集合...2016-09-20
  • 用Intel HAXM给Android模拟器Emulator加速

    Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • Android判断当前屏幕是全屏还是非全屏

    在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20