@InDef 替换Enum枚举,实现内存优化!

众所周知,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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值