为什么从Android的性能提示中删除“避免只需要整数的枚举”?


175

从官方开发人员文档中删除了“避免只需要整数的枚举”部分。(请参阅“ 为什么Android不使用更多枚举?”以获得旧版内容)

为什么?Android VM是否进行了更改,使技巧过时了?


2
作为参考,以下是灌木丛示例的反编译字节码:https
Josh Lee,

15
截至2014年3月,以下页面仍包含有关使用枚举的建议:developer.android.com/training/articles/memory.html#Overhead
Tahir Akhtar

2
一年后,正如@TahirAkhtar所说,官方的Android培训仍然说:“您应严格避免在Android上使用枚举。”
LarsH 2015年

1
有趣的是,建议避免枚举的建议是Android领先开发人员在2015年的这篇文章中:medium.com/google-developers/… 另外:“请注意,使用@IntDef批注,Android Studio和Gradle 1.3+支持此批注,会(在启用lint错误时)为您的代码建立时类型提供安全性,同时保留使用int变量的大小和性能优势。”
tonylo

4
自2018年4月起,以下页面不再包含有关使用枚举的建议。developer.android.com/topic/performance/memory#Overhead
罗宾·戴维斯

Answers:


157

该文档的原始版本只是一堆偏见。它被重写为仅包含由实际基准测试备份的事实,并且随着VM的更新而更新。您可以在http://code.google.com/p/dalvik/上找到各种基准-以及一些用于优化核心库的基准。


35
如果您在自己的SO配置文件中列出了凭据,将会很有帮助。我花了一些时间在挖。但是,既然我发现您似乎在VM团队中工作,我将接受您的回答作为正式回答。:)
Thierry-Dimitri Roy

25
当然,添加枚举类确实意味着您的应用程序包含一个额外的类,因此它不是免费的,但是我们必须假设开发人员仅在有用的地方添加枚举。我见过的枚举的唯一真正不好的用法是在一些和谐代码中,他们真正想要整数(用于位掩码等),而“枚举”在任何合理的意义上都不是枚举。如果发现自己经常调用“ ordinal()”,则可能是难闻的气味,这意味着您不需要枚举。但这不是特定于Android的技巧,无论如何这是一个非常罕见的设计错误。
艾略特·休斯

17
该文档是否也已过时@ Thierry-DimitriRoy?具体来说,您应严格避免在Android上使用枚举。
Jacob Tabak 2014年


11
您提供的链接已消失。
特里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.