众所周知,Enum在项目中用到的是非常多的。但是Enum的内存问题也是令人头疼的问题,在apk中Enum比常量多5到10倍的内存占用。所以关于内存优化这是个很有嚼头的问题!下边我就来说下常用的@InDef来替换Enum达到和Enum相同的功能,但是内存反而比Enum远远小。
一:何为Enum?Enum的用法?
关于这个问题,网上有很多帖子都说的非常详细,我就在不概述了,大家可以看看这个帖子https://blog.csdn.net/testcs_dn/article/details/78604547。
二:何为@InDef ?Indef的使用。
如果要使用@InDef 一般都会用到注解,所以在了解@InDef的用法之前,还是要先加入注解库,关于注解库的引用,一般都是在AS中加入
dependencies { compile 'com.android.support:support-annotations:xx.x.x' }
版本可以自己选。 然后要来说说@Retention,如果对注解不懂的同学,可以看下https://blog.csdn.net/asdgbc/article/details/70196749,写的还是非常详细的。看完后就可以来使用InDef来替换Enum了。
下边请看下边的代码
public class TestBean {
public static final int UP=1;
public static final int down=2;
public static final int left=3;
@Retention(RetentionPolicy.SOURCE)
@IntDef({UP,down,left})
private @interface Duration{}
public void setValue(@Duration int value){
mValue=value;
}
private int mValue;
public int getValue(){
return mValue;
}
}
从中就可以发现@Retention用法和@InDef的用法。然后我们来看下用了InDef后的内存情况,

可以看到跑了30s的时候,内存还是27.6。
下边来对比下不使用InDef时的内存情况。

同样是30s的时间。我们可以看到,内存比使用InDef多了有将近2.5M左右,
三:结论
从以上使用InDef和不使用InDef就可以看出使用Indef的时候内存是明显的减少的,说明InDef使用会比Enum的时候,内存减少很多。如果有兴趣的同学还可以去实现@StringDef,用法是和@InDef的用法是一样的。好了,这次的分享就到这了。下次可以试试自定义的注解来替换Enum。
本文探讨了在项目中使用@InDef替代Enum以优化内存的方法。通过对比实验,展示了@InDef在内存占用上相较于Enum的优势,指出其能显著减少内存消耗。
253

被折叠的 条评论
为什么被折叠?



