·        在使用任何第三方库之前都要三思,这件事非常严肃。

·        除非必须,不要使用数据库。

·        你可以尝试使用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实现起来很方便,但性能是真的差。