【问题标题】:Kotlin enum class in Android performanceAndroid 性能中的 Kotlin 枚举类
【发布时间】:2017-06-03 22:26:23
【问题描述】:

在 Java 中,我们被告知strictly avoid using enums on Android,因为它们占用了两倍的内存。

这是否也适用于 Kotlin 中的 enum class? Kotlin enum 会被编译成 Java enum 吗?

【问题讨论】:

标签: android performance enums kotlin


【解决方案1】:

看起来是这样,是的。

我在 Kotlin 中创建了这个:

enum class Thingies {
    Red,
    Green,
    Blue
}

并用javap -v反编译,这里是头文件:

public final class Thingies extends java.lang.Enum<Thingies>
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_FINAL, ACC_SUPER, ACC_ENUM

底线:它们是相同的,因此您可能必须以相同的方式对待它们。

【讨论】:

  • 现在谷歌的人说可以使用枚举,请查看youtu.be/IrMw7MEgADk?t=857
  • 如果你对这个类进行 Proguard,它会把它们变成整数吗?
【解决方案2】:

它们完全一样,一个 Kotlin Enum 是一个 Java JVM Enum。

【讨论】:

    【解决方案3】:

    现在您绝对可以在 Android 中使用枚举,他们在 Google I/O 视频中专门讨论了这个主题:https://www.youtube.com/watch?v=IrMw7MEgADk (如果你不想看整个视频,那么从 11:30 ish 开始到 14:40)。

    【讨论】:

    • 那个视频他说它仍然不如使用 int 高效。出于这个原因,Android 框架开发人员仍然避免使用它们。
    • @phreakhead 你直到 14:40 才听。 youtu.be/IrMw7MEgADk?t=858
    • 我建议您从 10:15 开始观看,如果您有额外的时间来了解上下文:它正在比较 dalvik 和 ART。
    • 是的,同意,它仍然可能不如使用 int 高效,但对于正常大小的项目,使用 10-50 个枚举不会对您的性能和内存产生太大影响,所以我会说使用只有枚举并快乐:)
    猜你喜欢
    • 2021-07-20
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多