这个世界上有两种人-从经验教训中学习的人以及听从别人建议的人。这里是我一路走来学到的一些东西,分享给大家:

  1. 在添加任何第三方party之前,请三思:这真的是一个成熟的项目吗?

  2. 如果一个东西用户看不到,就不要绘制它

  3. 除非真的需要,否则别使用数据库;

  4. 达到65k方法数限制来的非常快,真的,非常快!不过 multidexing 可以拯救你;

  5. RxJava 是 AsyncTasks 以及其它杂碎的最佳替代者;

  6. Retrofit 可能是现在最佳的网络请求库;

  7. 使用 Retrolambda来简化你的代码;

  8. 把 RxJava 和 Retrofit 以及 Retrolambda 结合起来会让你酷炸天!

  9. 我使用 EventBus 而且它也很好,但是我并不会用太多,因为这样代码库会变得凌乱;

  10. 包名按照功能来,而不是按分层来;

  11. 把所有东西都移到 application thread之外;

  12. lint 可以帮助你优化布局与布局树,这样你就能识别出那些可能已经被移除的冗余的View;

  13. 如果你在使用gradle,使用一切可能的方式去加速它;

  14. 对builds做profile reports,以便知道什么占据了编译时间;

  15. 使用一个 有名的 架构;

  16. 测试时比较花时间,但是一旦你找到诀窍它可以比不使用测试更快、更健壮;

  17. 使用 依赖注入 让你的app更模块化,从而更易于测试;

  18. 收听 fragmented podcast 将会让你受益;

  19. 千万别用私人邮箱作为你安卓市场的发布者账号;

  20. 总是使用恰当的输入类型;

  21. Use analytics to find usage patterns and isolate bugs;

  22. 关注最新的 libraries(使用dryrun 来快速查看它们的的效果);

  23. 你的service应该做你所需的事情,并且尽快死去;

  24. 使用 Account Manager 来提示登录用户名和邮箱地址;

  25. 使用CI(持续集成)来构建和发布你的beta和产品apk;

  26. 不要运行自己的CI server,维护server是费时的事情,因为磁盘空间,安全问题,更新server以防止SSL攻击等等原因。使用circleci, travis 或者 shippable, 它们便宜,而且你也可以少担心一些事情;

  27. Automate your deployments to the playstore;

  28. 如果一个library很大而你只需要使用其中的一部分功能,你应该寻找一个更小的来替代(比如依靠proguard );

  29. 不要使用多于实际需要的module。从零开始编译一个module或者仅仅是检查上个module是否最新所需要的时间几乎是加载 binary .jar/.aar依赖的4倍以上;

  30. 开始考虑用SVG来替代PNG

  31. Make library abstraction classes, it’ll be way easier to switch to a new library if you only need to switch in one place (e.g.AppLogger.d(“message”) can contain Log.d(TAG, message) and later realise that Timber.d(message) is a better option);

  32. 监控你的连接情况以及连接类型(wifi之下更新更多数据?);

  33. 监控你的电源和电量(在充电的时候更新更多的数据?电量低的时候暂停更新?);

  34. 一个用户界面就如一个笑话那样,如果你需要解释,那么证明它并不够好;

  35. Tests are great for performance: Write slow (but correct) implementation then verify optimizations don’t break anything with tests.

创建Android Apps的30个经验教训的更多相关文章

  1. 创建安卓app的30个经验教训

    在添加任何第三方party之前,请三思:这真的是一个成熟的项目吗? 如果一个东西用户看不到,就不要绘制它! 除非真的需要,否则别使用数据库: 达到65k方法数限制来的非常快,真的,非常快!不过 mul ...

  2. Building Android Apps 30条建议

    Building Android Apps — 30 things that experience made me learn the hard way There are two kinds of ...

  3. Apache Storm 的历史及经验教训——Nathan Marz【翻译】

    英文原文地址 中英文对照地址 History of Apache Storm and lessons learned --项目创建者 Nathan Marz Apache Storm 最近成为了ASF ...

  4. 从Apache Storm学到的经验教训 —— storm的由来(转)

    阅读目录 Storm来源 初探 再探 构建第一个版本 被Twitter收购 开源的Storm 发布之后 Storm的技术演进 构建开发者社区版 离开Twitter 提交到Apache Apache孵化 ...

  5. 在eclipse创建android project,最后一步点击finish没反应

    在创建android project的时候,到最后一步点击finish没有反应. 本来以为可能是SDK中的Extra下Android Support Library没有安装,后来检查发现Minimum ...

  6. Android开发60条技术经验总结

    Android开发60条技术经验总结,以下是全文: 1. 全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有 ...

  7. Android 开发60条技术经验总结(转)

    Android 开发60条技术经验总结: 1. 全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效. 2. ...

  8. 使用Flutter完成10个商业项目后的经验教训

    作者:Łukasz Kosman 和 Jakub Wojtczak 原文:https://medium.com/swlh/lessons-learned-after-making-the-first- ...

  9. 创建Android守护进程(底层服务)【转】

    本文转载自:https://blog.csdn.net/myfriend0/article/details/80016739 创建Android守护进程(底层服务) 前言 Android底层服务,即运 ...

随机推荐

  1. 机器学习技法笔记:14 Radial Basis Function Network

    Roadmap RBF Network Hypothesis RBF Network Learning k-Means Algorithm k-Means and RBF Network in Act ...

  2. docker配置仓储库时出错:无法安全地用该源进行更新,所以默认禁用该源

    在Ubuntu上安装docker,配置仓储库时第一次使用了阿里去的镜像,如下 sudo add-apt-repository "deb [arch=amd64] http://mirrors ...

  3. javascript 实现数据结构 - 队列

    队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项.队列在尾部添加新元素,并从顶部移除元素.最新添加的元素必须排在队列的末尾. 1.构造函数构建队 ...

  4. iOS-AFN Post JSON格式数据

    - (void)postRequest{ AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // >>> ...

  5. “大话架构”阿里架构师分享Java程序员需要突破的技术要点

    一.源码分析 源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 我认为是阅读源码的最核心 ...

  6. 一个关于margin-top的问题

    两个 此时内部div的样式为 当我把margin选中 如图所示: 我想要的效果是子div离父div有一个20px的间隙,但显然现在不是我想要的结果, 然后就开始查资料: 这个“问题”……它是CSS2. ...

  7. javascript的hashCode实现

    hashCode = function(str){ var hash = 0; if (str.length == 0) return hash; for (i = 0; i < str.len ...

  8. 自动化测试 | UI Automator 入门指南

    自动化测试的定义,这里先引用一段维基百科的定义: 在软件测试中,测试自动化(英语:Test automation)是一种测试方法,使用特定的软件,去控制测试流程,并比较实际的结果与预期结果之间的差异. ...

  9. Jenkins 批量删除历史构建

    在一次巡查 Jenkins 时,发现很多个项目的历史构建比较多,这些历史构建对于现在来说又没有什么用处,那么想把它删除,但是一个一个删除很累,毕竟总共加起来有上千个,历史构建,而且还不只是一个项目.那 ...

  10. MultipartFile 多文件上传的应用

    公司的项目很多地方要用到文件上传,以前的上传主要是用apache的fileupload ,使用的感受并不太好.今天试了试spring的MultipartFile,感觉还不错,封装的比较简洁. 当然,中 ...