0
点赞
收藏
分享

微信扫一扫

成功混入阿里内部偷师Android规范文档,【金九银十】

small_Sun 2022-01-24 阅读 74
  1. 静态常量使用全大写+下划线的方式, 例: public static final boolean IS_RELESAE = true;

  2. Kotlin使用的布局中的控件id必须使用小驼峰方式, 例: android:id="@+id/tvLogin"

推荐:

  1. 文件/资源命名时采用 模块+类型 的方式, 以便迅速查找相关内容, 例如登录页面: LoginActivity.kt, login_activity.xml, login_logo.png, 网络错误, #f3f3f3

  2. java使用的布局中的id名建议使用小驼峰方式, 并且使用控件类型缩写开头, 例: android:id="@+id/tvLogin", 附录常用控件缩写:

可见性

强制:

  1. 所有新定义的类/方法, 默认写成private, 只有在其他类需要引用时再看情况标为public, protected, package-private;

推荐:

  1. java定义的父类中定义的方法如果子类重写会导致问题时, 添加final关键字;

注释相关

类/复杂或者不能从方法名字看出意图的方法必须添加注释, 当类/方法添加注释时, 必须使用此类型注释:

/**

  • Created by XXX on 2019/6/19.
  • 描述此类作用, 逻辑复杂的说明一下主要思路
    /
    public class LoginPresenter {
    /
    *
  • 用于进行网络请求
  • @params xxx XXX
    */
    public void doLoginRequest(…){}
    }

变量注释不允许使用与类/方法一致的注释形式;

方法注释中不允许出现@params, @return的参数描述错误的情况, 必须实时更新;

推荐:

  1. 一段逻辑建议使用/* */的方式;

  2. 方法/参数建议添加 @Nullable, @NotNull, @UiThread 等注解;

代码风格

此git目录下同时存有 AndroidCodeStyleSetting.jar 配置文件, 用于AndroidStudio导入后按照统一风格进行代码的格式化.

如果没有编写代码时随时格式化代码的习惯, 可以在AndroidStudio版本控制提交窗口右侧Before Commit中勾选Reformat code选项.

Android基本组件

强制:

  1. Intent通信时不允许传递超过1M的数据, 可以采用外部Presenter中转或者EventBus传递的方式;

  2. Intent隐式启动时必须检查目标是否存在, 否则会出现目标未找到崩溃: if (getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ ONLY) != null);

  3. Activity/Service/BroadcastReceiver内如果有耗时操作, 必须采用多线程进行处理;

  4. 应用内部发送广播时, 只能使用LocalBroadcastManager.getInstance(this).sendBroadcast(intent), 不允许 context.sendBroadcast(intent), 避免外部应用拦截;

  5. 不允许在Application中缓存数据, 全局的共享数据可以使用某presenter存储, 或者使用SharedPreference读写;

  6. Activity或者Fragment中动态注册BroadCastReceiver时,registerReceiver和unregisterReceiver必须要成对出现;

推荐:

  1. Activity#onPause/onStop中结合isFinishing的判断来执行资源的释放, 必免放在执行时机较晚的Activity#onDestroy()中执行;

  2. 不要在Activity#onPause中执行耗时操作,
    这样会导致界面跳转卡顿, 可以放入Activity#onStop中执行;

UI/布局

强制:

  1. 布局xml优先使用ConstraintLayout, 可以保证无嵌套的情况下完成包括部分控件同时显隐需求在内的99%的布局要求;

  2. 不允许使用ScrollView包裹ListView/GridView/ExpandableListVIew等列表View, 复杂多项式列表可以使用多ItemType进行处理;

推荐:

  1. 在Activity中显示对话框或弹出浮层时, 尽量使用DialogFragment, 而非Dialog/AlertDialog, 便于随Activity生命周期管理弹窗的生命周期;

进程/线程/消息推送

强制:

  1. 存在多进程的情况时, Application中的初始化代码要根据进程分别处理, 避免初始化不必要的业务;

  2. 新建线程时, 必须通过线程池的方式, 不允许采用new Thread()的方式;

  3. Activity/Fragment中使用Handler时, 必须使用静态内部类+WeakReferences方式或者在onStop中调用handler.removeCallbacksAndMessages;

推荐:

  1. 多进程间共享数据使用ContentProvider替代SharedPreferences#MODE_MULTI_PROCESS;

文件/数据库

强制:

  1. 使用系统API获取文件路径, 避免手拼字符串, 例: android.os.Environment#getExternalStorageDirectory(), Context#getFilesDir(), 错误示例: File file = new File("/mnt/sdcard/Download/Album", name);

  2. 当使用外部存储时, 必须检查外部存储的可用性: Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());

  3. 数据库Cursor使用之后必须关闭, 以免内存泄漏;

推荐:

  1. SharedPreference仅存储简单数据类型, 不要存储复杂数据, 如json数据/Bitmap编码等;

  2. SharedPreference提交数据时, 尽量使用Editor#apply(), 而非Editor#commit();

图片/动画

强制:

  1. 加载大图时必须在子线程中处理, 否则会卡UI;

  2. 在Activity.onPause()/onStop()中关闭当前activity正在执行的动画;

推荐:

  1. Android图片建议转化为WebP格式, 可以减少APK体积;

  2. 动画尽量不要使用AnimationDrawable, 占用非常多内存;

  3. 使用ARGB_565代替ARGB_888, 减少内存占用;

  4. 当Animation执行结束时, 调用View.clearAnimation()释放相关资源;

安全性

强制:

  1. 上线包必须混淆;

  2. 加解密的秘钥/盐不允许硬编码到代码中, 以防反编译获取;

  3. Https处理时必须校验证书, 不允许直接接受任意证书;

行结束时, 调用View.clearAnimation()释放相关资源;

安全性

强制:

  1. 上线包必须混淆;

  2. 加解密的秘钥/盐不允许硬编码到代码中, 以防反编译获取;

  3. Https处理时必须校验证书, 不允许直接接受任意证书;

举报

相关推荐

0 条评论