enum vs android @Intdef - 哪一个更好地优化

时间:2016-01-04 01:40:22

标签: android enums android-support-library

我知道在将常量与枚举进行比较时,常量会占用较少的空间并且可以是原始的。我正在研究android中的@Intdef annotation,有人可以告诉我它是否有更好的存储来使用@Intdef vs enum。是否现在建议在android中放置枚举并尽可能使用@intdef前进?可以@Intdef做多态,我怀疑吗?

来自关于记忆overhead的Android文档:

  

枚举通常需要的内存是静态常量的两倍多。你应该严格避免在Android上使用枚举。

2 个答案:

答案 0 :(得分:22)

@Intdef显然更有效率,它只具有静态最终整数的零权重,它是所有编译时指令。枚举是类,如链接中提到的那样有足迹。 @Intdef为您提供枚举的最基本功能,即值验证,而不是枚举的其他功能,如自动字符串转换。

许多Android文档都是陈旧的,这很可能就是其中之一。早在android的早期阶段,每一点都计算在内,但现在设备的功能更强大。我个人会根据设计要求选择这两个选项,而不是太高效。此外,一些这些更高级的注释的语法不能使干净易读的代码,所以不是那里的粉丝。但是,如果情况需要良好的旧静态注入,@ Intdef会以牺牲视觉混乱为代价为您提供一些保护。

答案 1 :(得分:11)

除了之前的答案之外,我想补充一点,如果您使用Proguard(并且您一定要这样做以减小尺寸并模糊代码),那么您的Enums将自动转换为@IntDef }只要有可能:

https://www.guardsquare.com/en/proguard/manual/optimizations

  

<强>类/拆箱/枚举

     

尽可能将枚举类型简化为整数常量。

因此,如果你有一些离散值,某些方法应该只允许这个值而不是同一类型的其他值,那么我会使用Enum,因为Proguard将使这个手册优化代码我

here is关于使用杰克沃顿的点子的好帖子,请看一下。

  

作为一名图书馆开发人员,我认识到应该完成这些小优化,因为我们希望对消费应用程序的大小,内存和性能产生尽可能小的影响。但重要的是要意识到抛弃迭代器分配与索引循环,使用HashMap与二进制搜索集合(如SparseArray),并在适当的情况下将enum放入公共API与整数值中是完美的精细。了解差异以做出明智的决定是非常重要的,除了这一个愚蠢的统计数据外,视频几乎钉满了。