Android 性能优化之:避免在Android上过多使用enu

2017-10-31  本文已影响160人  SScience

一,enum基本用法

二,Android 中使用 enum 的缺陷

在 Android 官网中,已经明确指出在 Android 中应严格避免使用枚举,枚举通常比静态常量占用更多的内存:Enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android

在 Android 官方Android性能优化典范系列视频中有如下比较:

假设有这样一份代码,编译之后的dex大小是2556 bytes,在此基础之上,添加一些如下代码,这些代码使用普通 static 常量相关作为判断值:

使用常量整数 增加上面那段代码之后,编译成dex的大小是2680 bytes,相比起之前的2556 bytes只增加124 bytes。
假如换做使用enum,情况如下: 使用枚举enum 使用enum之后的dex大小是4188 bytes,相比起2556增加了1632 bytes,增长量是使用static int的13倍;此外,每个声明的enum和装载enum的数组也要占用内存。

因此过度在 Android 开发中使用 ENUM 将会增大 DEX 大小,并会增大运行时的内存分配大小。

不过,在上面的两种常用方式中,第一种方式所带来的便捷将大大简化因需求随变的工作,相比所带来的缺点可以忽略;而第二种方式则弊大于利了。

三,解决办法

1, 为了弥补 Android 平台不建议使用枚举的缺陷,官方推出了两个注解,IntDef和StringDef,用来提供编译期的类型检查。

2,如果开启了Proguard可以在很多情况下将枚举enum优化到整数对象。

参考:
使用枚举代替常量,简化工作!
优先使用注解,慎用枚举
Android 性能:避免在Android上使用ENUM
【内存优化】避免使用Enum

上一篇下一篇

猜你喜欢

热点阅读