· 在使用任何第三方库之前都要三思,这件事非常严肃。
· 除非必须,不要使用数据库。
· 你可以尝试使用realm(第三方数据库),这个真的不错。
· 项目很快就会达到65k方法,真的很快。此时可以求助Multidex。
· RxJava是AsyncTask的最佳替代,而且它远不止于此。
· Retrofit是最好用的网络库。
· 不要自己写Http客户端,可以用Volley或OkHttp。
· 使用RetroLambda缩减代码。
· 我能想到人生最cool的事,就是把RxJava、Retrofit和RetroLambda绑在一起。
· EventBus挺好用,但我不会用太多,因为代码会变得很纠结。
· 通过功能分包,而不是通过层。
· 不要在UI线程中执行逻辑代码,不然可能会ANR。
· 使用Lint检查Layout层级可以帮你发现没用的View,兴许可以去掉。
· 使用Gradle以及默认项目结构。
· 把密码与敏感数据放在gradle.properties里。(译者注:或许更好的方式是把这些数据放在local.properties里,然后把这个文件加进.gitignore)
· 使用styles来避免在Layout文件中写重复代码。
· 不要让ViewGroup层级太多。(会过度绘制)
· 监控电量,充电时可以进行更多的数据更新,低电量时停止数据的自动更新。
· 可以尝试JobScheduler。
· 当系统缺少内存(而不是应用缺少内存)时,系统会调用onLowMemory()方法,所以OOM原则上无法避免。
· 使用Account Manager来提示登录所需的信息(用户名、邮箱、密码等)。
· 给方法一个明确的命名,要能顾名思义。
· 启动界面是应用带给用户的第一体验。
· 如果不需要启动界面,那不要无故添加。
· 保持colors.xml文件短而简单,只写基本颜色就行。
· 保持dimens.xml文件简单,之定义基本常量。
· 当要时常修改一个字符串时,使用StringBuffer或StringBuilder(后者不保证线程安全)。
· 为了避免内存泄露:
1. 不要在AsyncCallBack中保留View引用。
2. 不要让静态对象持有View引用。
3. 最好不要在集合框架中存储View,但你也可以使用WeakHashMap。
· FlatBuffers是一个高效的跨平台的序列化类库,建议使用。
· Serializable实现起来很方便,但性能是真的差。