Android应用程序将运行在计算和存储能力、电池寿命有限的移动设备上,正因为如此,它应该有很好的运行效率。电池寿命是一个原因,你可能想要优化你的应用程序,即使它似乎已经运行“够快”。电池寿命对用户非常重要,Android的电池使用崩溃意味着用户将知道你的应用程序是否负责他们的电池耗尽。
这份文件涵盖以下主题:
•审慎地优化AP
•避免创建对象
•性能神话
•静态虚拟更佳
•避免内部Getters/Setters
•静态常量使用Static Final
•循环的语法使用Enhanced
•你只需要Ints, 避免枚举
•使用Package限定内部类范围
•审慎地使用浮点
•了解和使用Lib
•审慎地使用Native
•关闭Notes
请注意,虽然本文档主要包括微优化,这将几乎从未成败您的软件。选择正确的算法和数据结构应该永远是你的优先事项,但不属于本文件的范围。
简介
有两种编写有效的代码的基本规则:
•不要做你不需要做的。
•不分配没必要分配的内存。
审慎地优化AP
当你开始考虑如何设计你的应用程序和正在写,正如Josh Bloch 在他的书中--Effective Java中写道, "考虑有关优化谨慎点"。这里的“第47项:明智地优化”,经允许摘自发行书的最新版本。虽然Josh Bloch 没有进行Android应用程序的开发,在写这部分 - 例如,java.awt.Component类的引用是不是Android用,和Android的Dalvik虚拟机使用不是一个标准的JVM - 他的观点仍然有效。
有三个警句关于优化,每个人都应该知道。他们也许开始过度遭遇,而你仍还不熟悉他们,在这里,他们是:
More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason—including blind stupidity.
—William A. Wulf 1
以提高效率的之名(不一定要实现它)而在计算上犯错比其他任何一个理由,包括盲目愚蠢,将犯下更多的犯下的罪过。
- 威廉A ·伍尔夫 1
We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.
—Donald E. Knuth 2
我们应该忘记小效率,例如约97%的时间:不成熟的优化是一切罪恶的根源。
- Donald E. Knuth 2
We follow two rules in the matter of optimization:
Rule 1. Don't do it.
Rule 2 (for experts only). Don't do it yet — that is, not until you have a perfectly clear and unoptimized solution.
—M. A. Jackson 3
我们遵循两个规则的优化问题:
第1条。不这样做。
第2条(只针对专家)。不要做这些事 - 也就是说,直到你有一个非常清楚的,未优化的解决方案。
- M.A.杰克逊3
这些格言都早了20年的Java编程语言。他们告诉有关优化深刻的真理:它是很容易的弊大于利,特别是如果你过早地优化。在这个过程中,你可能会产生软件既不快,也不是正确的,不容易稳定。
不牺牲性能良好的建筑原则。努力写出好的方案,而不是快速的。如果一个好的方案是不够快,其架构将允许它进行优化。好节目体现了信息隐藏:在可能的情况,他们在单独的模块设计本地化决策的原则,使个人的决定改变可以不影响系统(第13项)其它部分。
这并不意味着你可以忽略性能问题,直到您的程序完成。执行问题是可以修复后的优化,但却普遍存在的限制性能的架构缺陷,如不重写系统就不可能再修复。更改你的设计根本的方面,这些将导致成为难以维护和进一步开发不良结构系统。因此,你必须在设计过程中考虑性能。
<--待续-->