系统设计
强制:
-
不允许出现两段相同的逻辑块, 必须抽出为公共方法, 差异性使用参数控制, 避免修改时多处修改导致遗漏;
-
不允许出现两段相同的处于同一逻辑组的复杂布局, 必须抽为单独的include/merge;
-
不允许父类中出现子类具体方法, 如果需要的话可以父类定义抽象方法, 交由子类实现;
-
不允许Activity内多Fragment之间的直接沟通, 必须通过Activity中转;
推荐:
-
推荐使用MVP或者MVVM架构;
-
推荐使用Kotlin语言;
-
采用模块分类方式替代文件类别方式, 方便快速查找模块相关内容, 例: LoginActivity/LoginPreenter/LoginHttpRequest/LoginBean/LoginAdapter等所属同一登录模块的文件放入一个文件夹, 而不是所有activity放入一个文件夹, 所有adapter放入一个文件夹.
命名方式
强制:
-
不允许出现中文命名方式;
-
java/kotlin文件使用大驼峰方式, 例: LoginActivity.kt, NewsAdapter.kt, NewsBean.java;
-
layout/drawable/anim/style等resource文件使用小写+下划线的方式, 例: login_activity.xml, login_logo.png;
-
类定义使用大驼峰方式, 例: class LoginPresenter {}, class NewsBean {};
-
对象使用小驼峰方式, 例: LoginPresenter loginPresenter, NewsBean newsBean;
-
静态常量使用全大写+下划线的方式, 例: public static final boolean IS_RELESAE = true;
-
Kotlin使用的布局中的控件id必须使用小驼峰方式, 例: android:id=“@+id/tvLogin”
推荐:
-
文件/资源命名时采用 模块+类型 的方式, 以便迅速查找相关内容, 例如登录页面: LoginActivity.kt, login_activity.xml, login_logo.png, 网络错误, #f3f3f3
-
java使用的布局中的id名建议使用小驼峰方式, 并且使用控件类型缩写开头, 例: android:id=“@+id/tvLogin”, 附录常用控件缩写:
可见性
强制:
- 所有新定义的类/方法, 默认写成private, 只有在其他类需要引用时再看情况标为public, protected, package-private;
推荐:
- java定义的父类中定义的方法如果子类重写会导致问题时, 添加final关键字;
注释相关
类/复杂或者不能从方法名字看出意图的方法必须添加注释, 当类/方法添加注释时, 必须使用此类型注释:
/**
- Created by XXX on 2019/6/19.
- 描述此类作用, 逻辑复杂的说明一下主要思路
/
public class LoginPresenter {
/* - 用于进行网络请求
- @params xxx XXX
*/
public void doLoginRequest(…){}
}
变量注释不允许使用与类/方法一致的注释形式;
方法注释中不允许出现@params, @return的参数描述错误的情况, 必须实时更新;
推荐:
-
一段逻辑建议使用/* */的方式;
-
方法/参数建议添加 @Nullable, @NotNull, @UiThread 等注解;
代码风格
此git目录下同时存有 AndroidCodeStyleSetting.jar 配置文件, 用于AndroidStudio导入后按照统一风格进行代码的格式化.
如果没有编写代码时随时格式化代码的习惯, 可以在AndroidStudio版本控制提交窗口右侧Before Commit中勾选Reformat code选项.
Android基本组件
强制:
-
Intent通信时不允许传递超过1M的数据, 可以采用外部Presenter中转或者EventBus传递的方式;
-
Intent隐式启动时必须检查目标是否存在, 否则会出现目标未找到崩溃: if (getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ ONLY) != null);
-
Activity/Service/BroadcastReceiver内如果有耗时操作, 必须采用多线程进行处理;
-
应用内部发送广播时, 只能使用LocalBroadcastManager.getInstance(this).sendBroadcast(intent), 不允许 context.sendBroadcast(intent), 避免外部应用拦截;
-
不允许在Application中缓存数据, 全局的共享数据可以使用某presenter存储, 或者使用SharedPreference读写;
-
Activity或者Fragment中动态注册BroadCastReceiver时,registerReceiver和unregisterReceiver必须要成对出现;
推荐:
-
Activity#onPause/onStop中结合isFinishing的判断来执行资源的释放, 必免放在执行时机较晚的Activity#onDestroy()中执行;
-
不要在Activity#onPause中执行耗时操作, 这样会导致界面跳转卡顿, 可以放入Activity#onStop中执行;
UI/布局
强制:
-
布局xml优先使用ConstraintLayout, 可以保证无嵌套的情况下完成包括部分控件同时显隐需求在内的99%的布局要求;
-
不允许使用ScrollView包裹ListView/GridView/ExpandableListVIew等列表View, 复杂多项式列表可以使用多ItemType进行处理;
推荐:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
最后
在此为大家准备了四节优质的Android高级进阶视频:
架构师项目实战——全球首批Android开发者对Android架构的见解
附相关架构及资料
往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。
mg-R4t2Pu6W-1711869415519)]
往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。