1. 添加任何第三方库时都要三思而后行,因为这是一个非常严肃的决定。
  2. 如何用户无法看到它,不要去绘制它!
  3. 除非你真的需要,否则不要使用数据库。
  4. 65k方法限制非常容易遇到,你可以通过multidexing来修复它。
  5. RxJava是用来取代异步操作AsyncTasks的最佳替代方案。
  6. Retrofit是最佳的网络库。
  7. 通过Retrolambda缩短你的代码
  8. 组合RxJava、Retrofit和Retrolambda以实现最大化利用。
  9. 我使用EventBus,它非常伟大!但是我并没有大量使用,因为大量使用会导致代码复杂度提高。
  10. 通过功能分包,而不是层次。
  11. 把任何事情都从应用的线程中移除。
  12. lint你的视图去帮助你优化布局和布局的层次,以便于你辨认哪些视图是多余的、可移除的。
  13. 如果你使用gradle你可以加速它!
  14. 生成你的编译报告,看看花费的构建时间;
  15. 使用一个众所周知的架构;
  16. 测试需要花费时间,但是一旦你掌握了它之后,将会获得比未测试更加快速和健壮的代码。;
  17. 使用依赖注入,让你的应用更模块化并且更容易测试;
  18. 收听fragmented podcast对你来说是有用的。
  19. 不要使用你的个人电子邮件作为你的android市场出版商账户;
  20. 总是使用适当的输入类型;
  21. 使用分析来找出使用平台和隔离缺陷;
  22. 掌握新的状态(可以通过使用dryrun来快速测试)
  23. 你的底层服务应该做它们需要做的事情,并且尽快的销毁。
  24. 使用Account Manager去建议登录用户名和邮箱地址。
  25. 使用CI(持续集成)去编译和分发你的betaproduction的apk。
  26. 不要经营你自己的CI服务器,因为维护服务器包含磁盘空间/安全问题/更新服务器以免受到SSL攻击等等。应该使用circleci,travis或者shippable。它们便宜并且少一点担心。
  27. 自动化部署到playstore
  28. 如果一个库非常大而你只需要使用其中一个小功能子集。你应该找到一个更小的替代方案。(例如依赖proguard)
  29. 除非实际需要,不要使用更多的模块。如果模块不是经常修改,需要考虑到的重要问题是:从头编译它们所需要的时间(CI 的编译是一个很好的例子),甚至检查以前的各个模块的构建是否最新的,比起简单的加载.jar/.aar库时间要增加几乎4倍。
  30. 开始考虑为了svg格式放弃png格式;
  31. 为库创建抽象类,如果你仅仅需要一个开关去简单的切换到一个新的库(例如AppLogger.d(“message”) 能够包含 Log.d(TAG, message)),而后意识到Timber.d(message)是一个更好的选择。)
  32. 监视活跃连接和连接类型(当处于WIFI时有更多的数据更新?)
  33. 监控电源和电池(充电时更多的数据更新?当电池电量低时暂停更新?);
  34. 用户界面就像是一个笑话。如果需要去解释它,它不是那么好;

译自:https://medium.com/@cesarmcferreira/building-android-apps-30-things-that-experience-made-me-learn-the-hard-way-313680430bf9#.1lb3hoh97