一次百度内存泄漏定位

来源:互联网 发布:物流管理信息系统软件 编辑:程序博客网 时间:2024/05/19 17:04

封装百度定位类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 进行释放,导致调用定位的类没有被完全回收,造成内存泄漏。

原创粉丝点击