java - 为什么在 android 标准类中使用 static final int 来避免枚举?

标签 java android enums

在标准的 android 类中,static final int vars 用于表示不同的标志。例如,查看可见性标志:

/** @hide */
@IntDef({VISIBLE, INVISIBLE, GONE})
@Retention(RetentionPolicy.SOURCE)
public @interface Visibility {}

/**
 * This view is visible.
 * Use with {@link #setVisibility} and <a href="#attr_android:visibility">{@code
 * android:visibility}.
 */
public static final int VISIBLE = 0x00000000;

/**
 * This view is invisible, but it still takes up space for layout purposes.
 * Use with {@link #setVisibility} and <a href="#attr_android:visibility">{@code
 * android:visibility}.
 */
public static final int INVISIBLE = 0x00000004;

/**
 * This view is invisible, and it doesn't take any space for layout
 * purposes. Use with {@link #setVisibility} and <a href="#attr_android:visibility">{@code
 * android:visibility}.
 */
public static final int GONE = 0x00000008;

/**
 * Mask for use with setFlags indicating bits used for visibility.
 * {@hide}
 */
static final int VISIBILITY_MASK = 0x0000000C;

private static final int[] VISIBILITY_FLAGS = {VISIBLE, INVISIBLE, GONE};

为什么开发人员在这种情况下避免使用 enum

最佳答案

正如其他人所说,他们这样做主要是为了性能。主要的性能影响是它们使用的内存量。

我觉得这是关于此事的最佳资源(来自马口) https://youtu.be/Hzs6OBcvNQE

我知道 SO 上的视频很不寻常,但它是有关此事的最重要的资源。

一个侧面: 尽管枚举未进行性能优化,但大多数在 Android Studio 中完成的应用程序如果使用 Progaurd 在编译时将所有枚举转换为静态最终整数,应该没问题。我这样做是因为我发现枚举更具表现力。

关于java - 为什么在 android 标准类中使用 static final int 来避免枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39133877/

相关文章:

java - 枚举性能中的单例

c++ - typedef 枚举输入

Android WebView在某些手机上无法显示html表格的右边框

android - 无法在 onActivityResult 处 getIntExtra()

java - 在 while 循环内重复错误消息

java - Android 上的安全性

android - 现有 Android 项目的 React Native 配置

ios - 预期标识符或 '(' 使用 typedef enum Objective-C

Java设计模式让sdk支持多种认证方案

java - ThreadMXBean.getThreadCpuTime() 是否包括在所有状态下花费的时间,或仅包括 RUNNABLE?