android中使用static 类造成的问题

static 类使用场景-单例模式

java中经常会使用单例模式,单例模式保证内存中同一时间只有一个类的对象,如:

public class AutoTestModuleManager{

    private static AutoTestModuleManager mAutoTestMdManager = null;
    private Map<String, AutoTestModule> mUiList = null;

    private AutoTestModuleManager() {
        Log.w("test","AutoTestModuleManager");
        if(null == mUiList){
            mUiList = new HashMap<String, AutoTestModule>();
        }
        mUiList.clear();
    }
    public synchronized static AutoTestModuleManager getInstance() {
        if (null == mAutoTestMdManager) {
            mAutoTestMdManager = new AutoTestModuleManager();
            SkLog.e("getInstance");
        }

        return mAutoTestMdManager;
    }
}

单例模式就是使用static 类,上述代码的getInstance获取AutoTestModuleManager 的单一对象。还有下面一种俗称双重检查锁定的单例模式:

public class Singleton {  
      private volatile static Singleton singleton;  
      private Singleton (){}   
      public static Singleton getSingleton() {  
      if (singleton == null) {  
          synchronized (Singleton.class) {  
         if (singleton == null) {  
              singleton = new Singleton();  
          }  
         }  
    }  
     return singleton;  
     }  
}  

android中使用static类易出现的问题

在android中使用static类需要注意,如果apk退出时程序员未主动释放static类,将造成内存泄漏。如上述AutoTestModuleManager类,如果在activity中调用,当activity onPause-》onStop-》onDestory退出后,AutoTestModuleManager静态对象并没有被销毁,这时如果再次进入activity,会发现AutoTestModuleManager的构造函数并没有被执行,也就是说AutoTestModuleManager静态对象没有重新生成。
出现这种问题带来的不仅仅是内存泄漏的危害,对我们的程序运行逻辑也是有意料不到的影响。比如我们在activity中调用静态类,希望在activity调用的时候能初始化该类,但是如果activity退出的时候没有释放静态类,当再次启动activity时,静态类没有初始化,而是沿用的上一次的,这样就会带来问题。

解决办法

在使用静态类时要注意使用完后释放,如上述AutoTestModuleManager类中,增加release接口:

public synchronized void release(){
        if(mUiList != null){
            mUiList.clear();
        }
        mUiList = null;
        mAutoTestMdManager = null;
    }

activity中使用完AutoTestModuleManager后调用release()即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值