1、单测尽量补齐,迫使自己去优化代码,至少是有优化函数的设计的动力,考虑函数的结耦,复杂度。
2、layout层级减少。
3、String资源平衡,如为减少资源表大小可直接使用字符串而不是字符串资源,减少资源ID
4、及时关闭资源,如FileOutputStream 、sqlite、子线程的handler,子线程,如没有复用的话回收bitmap。
5、图片的bitmap不要直接加载,一个先计算大小,再安排按比例缩放后加载。
6、使用API的常用函数,如Arrays.sort,Math.max等。
7、自己编写一下自动化测试脚本,如有devops系统配合是最好,没有也可以在自己本机制定测试脚本的任务。
8、Sharepreferences不要存放大的key和value,会引起界面卡、频繁GC、占用内存等等。毫不相关的配置项就不要放在在一起,文件越大读取越慢。读取频繁的key和不易变动的key尽量不要放在一起,影响速度,如果整个文件很小,那么忽略吧,为了这点性能添加维护成本得不偿失。不要乱edit和apply,尽量批量修改一次提交,多次apply会阻塞主线程。推荐DataStore或MMKV替代。
9、线程并且最好每个线程都有意义的名字,方便后面的异常排查。
10、线程池使用ThreadPoolExecutor,自定义控制线程各个参数值。
11、编码的系统分析应该是编码工作的大头,在此阶段应该是占有编码时间的60%,后面的工作就是纯按照自己的设计敲代码。
12、对于所有的编码细碎工作一个工具化,自己工具项目准备或编写称手的工具基本或找到插件。
13、代码CR的分级代码规范<代码的实现<代码函数或类的设计<和具体场景的适配。
14、设计模式常记心间,而使用是融汇贯通的,设计模式可以相互配合,相互嵌套的,不能死守书本规则。
15、工作时对于功能代码的完成优先级:核心的(网络,数据库)库选择全组或部门都有天意别库的宝贝和相关基础功能编写>基础的UI界面(保证和PRD功能项对其,此时也可时时和产品确认)> 需要对接的接口(能保证冒烟测试,即使是写死参数)>功能代码的单测,可以先不写android的API相关单测> 自己编写自动化测试所有功能 >UI精细化打磨> gradle的修改,配合多渠道的或AOP> 数据监控埋点或AOP进行。
16、实例服用,如多个VIew set 一个setOnClickListener,复用链接池,服用缓存,bitmap。
17、时刻注意线程的并发处理,和线程死锁,有死锁工具查看死锁发生。
18、bug的收集,或自己实现收集。
19、包体大小,性能,耗电要留专门时间进行测试,并且要有测试记录,要持续优化。
20、异常记录或日志记录项要提前封装为工具,包括,app版本,时间,机型,线程名,函数名,当前的函数的传入参数。
21、从其他语言或框架借鉴方法,如android也可以使用Spring SPI的设计。
22、控制app的启动包括第三方的SDK的启动,有的依赖ContentProvider要控制自动启动,再由调用方控制。
23、金融数据最好用字符串表数字,汇率或利息计算有统一服务器(或同意的JNI实现)提供,UI层只是展示。
24、项目真的设计架构模型要统一,MVP,MVVM,MVI都可,但是成员间要统一。
25、函数要throw异常,那么在注释或函数的throws要表明,方便如有其他人调用可在编码 时提前预知并处理。
26、如何技术逻辑判断或业务逻辑要有兜底策略。
27、非依赖的三方库内的功能要 做非引入操作exclude。
28、要留足代码系分设计,代码编写,代码审核,功能自测时间。
29、任何任务超过并发时超过6个就要考虑调度器,排优先级和控制任务依赖关系。
30、网络抓包工具,代码编写一开始就要配置好,包括https的解码。
31、秉持所见才所得,不见不忙活的理念,处理数据请求。
32、任何数据容器如Hashmap,StringBUilder都有估计容量,减少扩容操作或空间浪费。
33、常用网络协议(TCP,UDP,HTTP,HTTPS,MQTT,QUIC,Websocket)需要口头练,心里清,随时都会遇到,有时会出现一个功能多个协议组合。
34、信息安全,传输或存储都要有安全机制保障。除非你做的是demo。
35、序列化,内部的Serializable(Java提供 后面简称为S)和Parcelable(Android特有 下面简称为P);或者probuff或直接json。
36、要评估不同场景下的遍历效率。
37、认真学习AOSP里面的Android的系统APP的架构代码。
38、注意收集弃用的控件和API,和新的权限控制越来越严格了。
39、开发阶段始终开启严格模式。