相逢意气为君饮,系马高楼垂柳边。这篇文章主要讲述为什么静态final int在android标准类中用于避免枚举?相关的知识,希望能为你提供帮助。
在标准的android类中,static final int
变量用于表示不同的标志。例如,查看可见性标志:
/** @hide */
@IntDef({VISIBLE, INVISIBLE, GONE})
@Retention(RetentionPolicy.SOURCE)
public @interface Visibility {}/**
* This view is visible.
* Use with {@link #setVisibility} and <
a href="https://www.songbingjia.com/android/#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="https://www.songbingjia.com/android/#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="https://www.songbingjia.com/android/#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};
【为什么静态final int在android标准类中用于避免枚举()】为什么开发人员在这种情况下避免使用
enum
?答案正如其他人所说,他们主要是为了表现。主要的性能影响是他们使用的内存量。
我觉得这是关于此事的最佳资源(来自马口)https://youtu.be/Hzs6OBcvNQE
我知道视频在这里很不寻常,但它是关于这个问题的最重要的资源。
一个侧面点:虽然Enums没有进行性能优化,但如果他们使用Progaurd将编译时的所有枚举转换为静态最终整数,那么在Android Studio中完成的大多数应用都应该没问题。我这样做,因为我发现Enums更具表现力。
另一答案因为枚举很贵。首先,它们是弦乐。这意味着比较两个是字符串比较而不是int比较,这可能是成本的许多倍。其次,它们是对象。在具有有限RAM的设备上创建大量小对象是由于碎片导致OOM的一种很好的方式,每次分配都需要时间。因此,他们的表现太可怕了。
真的java在设计枚举时搞砸了 - 它们永远不应该是对象或字符串。甚至服务器端性能导向的代码也避免了它们支持int。
推荐阅读
- 我应该如何在stylesheet_link_tag之前加载application.scss( - Rails5中的最佳实践是什么?)
- 无法显示Visual Studio 2008 Tools for Applications编辑器 - MSBuildToolsPath
- 什么是Android提示的颜色代码()
- 在Android Textview中为不同的超链接使用不同的颜色
- 如何使用onRequestPermissionsResult处理React Native Android模块中的权限()
- 在RecyclerView-AndroidX中的项目之间添加不同的布局
- Android计时器更新文本视图(UI)
- 在Android Studio中添加延迟计时器
- 如何使用android延迟不扩展或实现Thread或Runnable