我是怎样优化 Android 工程中的 Enum的
来源:互联网 发布:情定三生知夏恢复记忆 编辑:程序博客网 时间:2024/05/18 00:22
转载请注明出处:
http://blog.csdn.net/brucehurrican/article/details/62883396
学过 Java 的人都知道,enum 可以方便的用于参数校验,类型检测,常量声明等场景。之前我接手维护一个app工程,发现其中代码有很多 enum,此时功能不多的 app 的安装包则高达 20+M,急需要 apk瘦身。除了通用的图片压缩,降低分辨率来瘦身外。针对代码层面,我还进行了,enum 改造,改一点测一点,逐步将工程中的 enum 全部替换掉。写下此文全当是个总结吧。
AA.java
public class AA { private void checkParam(String msg) { Log.d("AA", msg); }}
这是最简单一个参数校验方法。编译后的 AA.class 文件大小为 505B 记为 originalFileSize = 505。
为了限定 msg 只能输入特定的信息,用 enum 写法如下
public class AA { public enum Info { JAVA, ANDROID } private void checkParam(Info msg) { Log.d("AA", msg.toString()); }}
这样保证 msg 只能输入 JAVA, ANDROID这两种了。编译后的 AA.class 文件大小 658B, 同时编译后还生成了 AA$Info.class 文件大小为 1KB,记为 enumFileTotalSize = 658 + 1024。
通过 Android 注解的方式来改造 enum
public class AA { private void checkParam(@paramType String msg) { Log.d("AA", msg); } @Retention(RetentionPolicy.SOURCE) @StringDef({"JAVA", "ANDROID"}) private @interface paramType{ }}
这样编译后的 AA.class 文件大小为 593B,同时生成了 AA$paramType.class 文件大小为 371B,记为 annotationFileTotalSize = 593 +371
最终比较结果:
originalFileSize = 505B,enumFileTotalSize = 658 + 1024 = 1682B, annotationFileTotalSize = 593 +371 = 964 B
通过数据比较可以明显看到,为了达到限定入参类型分别采用枚举法和注解法,对原有文件的体积大小增长比为233% 和 91%,采用枚举法比采用注解法造成最终编译后的文件体积大小多了 74%。
以上述 demo 为例,注解法比枚举法会有74%的瘦身效果。
按照 google 官方推荐的性能优化方案,也不推荐使用枚举法,so 还是赶紧使用注解来代替枚举吧~
- 我是怎样优化 Android 工程中的 Enum的
- 我是怎样找工作的
- 我是怎样的人?
- 我是怎样诱骗漂亮女孩的
- 我是怎样抗干扰垃圾邮件的
- 我是怎样使用BoundsChecker的
- 我是怎样使用BoundsChecker的
- 我是怎样使用BoundsChecker的
- 我是怎样自动机入门的
- 我是怎样逆袭的?
- 我是一个怎样的程序员
- Android enum的使用
- Android enum的用法
- Android studio 导入工程里面的模块不知怎样运行
- 我是怎样考上浙大新闻系的
- 我是怎样“诱骗”漂亮女孩的(上)[转载]
- [zz] 我是怎样诱骗漂亮女孩的【完整版】
- 译文:我是怎样使用BoundsChecker的
- layout_marginRight不起作用
- springMVC--4种映射处理器handlerMapping
- GCC C语言处理主要函数之init_pragma
- yii2.0 数据库关联查询
- c++---函数和类模板
- 我是怎样优化 Android 工程中的 Enum的
- 读取TXT文件
- Spring生命周期不可不知的回调接口
- PixelFormat 图像颜色的数据格式
- [我眼中的C#]文件读写操作
- javascript和as的结合解决禁止flash的右键功能
- Spring框架第一天
- Navicat for mysql Mac版 快捷键
- Android EventBus使用详解