推荐:
1.文件/资源命名时采用 模块+类型 的方式, 以便迅速查找相关内容, 例如登录页面: LoginActivity.kt, login_activity.xml, login_logo.png, 网络错误, #f3f3f3
2. 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.MATCHDEFAULT 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进行处理;
推荐:
- 在Activity中显示对话框或弹出浮层时, 尽量使用DialogFragment, 而非Dialog/AlertDialog, 便于随Activity生命周期管理弹窗的生命周期;
进程/线程/消息推送
强制:
- 存在多进程的情况时, Application中的初始化代码要根据进程分别处理, 避免初始化不必要的业务;
- 新建线程时, 必须通过线程池的方式, 不允许采用new Thread()的方式;
- Activity/Fragment中使用Handler时, 必须使用静态内部类+WeakReferences方式或者在onStop中调用handler.removeCallbacksAndMessages;
**推荐:**多进程间共享数据使用ContentProvider替代SharedPreferences#MODE_MULTI_PROCESS;
文件/数据库
强制:
- 使用系统API获取文件路径, 避免手拼字符串, 例: android.os.Environment#getExternalStorageDirectory(), Context#getFilesDir(), 错误示例: File file = new File(“/mnt/sdcard/Download/Album”, name);
- 当使用外部存储时, 必须检查外部存储的可用性: Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
- 数据库Cursor使用之后必须关闭, 以免内存泄漏;
推荐:
- SharedPreference仅存储简单数据类型, 不要存储复杂数据, 如json数据/Bitmap编码等;
- SharedPreference提交数据时, 尽量使用Editor#apply(), 而非Editor#commit();
图片/动画
强制:
- 加载大图时必须在子线程中处理, 否则会卡UI;
- 在Activity.onPause()/onStop()中关闭当前activity正在执行的动画;
推荐:
- Android图片建议转化为WebP格式, 可以减少APK体积;
- 动画尽量不要使用AnimationDrawable, 占用非常多内存;
- 使用ARGB_565代替ARGB_888, 减少内存占用;
- 当Animation执行结束时, 调用View.clearAnimation()释放相关资源;
安全性
强制:
- 上线包必须混淆;
- 加解密的秘钥/盐不允许硬编码到代码中, 以防反编译获取;
- Https处理时必须校验证书, 不允许直接接受任意证书;
- 使用Android的AES/DES/DESede加密算法时, 不要使用默认的加密模式ECB, 应显示指定使用CBC/CFB加密模式;
- 禁止把敏感信息打印到log中;
- 在应用发布时必须确保android:debuggable为false;
- 必须利用X509TrustManager子类中的checkServerTrusted函数效验服务器端证书的合法性,
- 必须将android:allowbackup属性设置为false, 防止adb backup导出应用数据;
作者目前在深圳,13年java转Android开发,在小厂待过,也去过华为,OPPO等,去年四月份进了阿里一直到现在。等大厂待过也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
**我们今年整理了一份阿里P7级别的Android架构师全套学习资料,**特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括腾讯,以及字节跳动,华为,小米,等一线互联网公司主流架构技术。如果你有需要,尽管拿走好了。
以下为我整理的资料免费分享;【阿里P7】Android高级教程+BAT面试题
1.Android高级技术脑图
2.P7级Android高级架构视频教程
3.Android核心高级技术PDF文档+BAT大厂面试真题解析
4.Android思维脑图(技能树)
以下为我们整理的资料免费分享;
在评论区留言或者私信我,视频教程,BAT面试真题解析文档,我看到都会回复的
也可关注我的简书号,我的个人简介里面就有免费获取方式 。
1.一线互联网移动架构师进阶路线图【深度对接阿里P7级】

点击查看详细思维脑图地址;【百度脑图】
2.【Android高级架构视频教程】;
文末
不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊
小编将自己6年以来的面试经验和学习笔记都整理成了一个**937页的PDF,**以及我学习进阶过程中看过的一些优质视频教程。

其实看到身边很多朋友抱怨自己的工资很低,包括笔者也是一样的,其原因是在面试过程中没有给面试官一个很好的答案。所以笔者会持续更新面试过程中遇到的问题,也希望大家和笔者一起进步,一起学习。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
化学习资料的朋友,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618156601)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
8111

被折叠的 条评论
为什么被折叠?



