一次百度内存泄漏定位

封装百度定位类BDLocationManager单例类,封装了一些启动定位,停止定位、注册监听、注销监听等的方法。大概代码是这样。

public class BDLocationManager{
 	private static BDLocationManager INSTANCE = null;
       private BDLocationListener lastListener;

   	public synchronized static void init(Context context) {
         	if (INSTANCE == null) {
            		 INSTANCE = new BDLocationManager(context.getApplicationContext());
       		 }
    	}

    	public synchronized static BDLocationManager getInstance() {
        	return INSTANCE;
   	 }

       public void registerLocationListener(BDLocationListener listener) {
        	unRegisterLocationListener(lastListener);
       		 if (locationClient != null && listener != null) {
          		  locationClient.registerLocationListener(listener);
           		 lastListener = listener;
        	}
    }

    public void unRegisterLocationListener(BDLocationListener listener) {
      	  if (locationClient != null && listener != null) {
           	 locationClient.unRegisterLocationListener(listener);
      	  }
    }
 
    public void stop() {
        unRegisterLocationListener(lastListener);
        lastListener = null;
        if (locationClient != null && locationClient.isStarted()) {
            locationClient.stop();
        }
    }
}
使用BDLocationManager.getInstance().registerLocationListener()注册,回调定位结果。定位完成后调用stop()停止定位,停止定位注销了 unRegisterLocationListener(),BDLocationManager全局有效对lastListener 有引用,没有对lastListener 进行释放,导致调用定位的类没有被完全回收,造成内存泄漏。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值