LocationListener和内存泄漏

fra*_*acz 4 android location memory-leaks locationlistener

根据找到用户位置的示例应用程序,监听活动中的位置更改是个好主意:

class MyActivity extends Activity implements LocationListener {
    @Inject
    private LocationManager locationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
    }

    @Override
    public void onLocationChanged(Location location) {
        // do something with location
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定.当配置发生更改时,我的活动将被销毁并重新创建,下次将自己注册为侦听器.对旧活动的引用是在LocationManager中进行的,不是吗?

如果我提取LocationListener到单独的对象,我仍然有如何通知当前活动有关新位置的问题(不一定与请求活动相同).

有没有什么共同的模式来解决这个问题?

Dim*_*erg 5

在这个例子中,您还有另一个问题:您的GPS聆听器将始终工作并将耗尽电池.

更好的做法是:

1)将LocationListener注册到Activity中 onStart()

2)将LocationListener移除到Activity中 onStop()

这将解决这两个问题.

如果您需要应用程序跟踪用户在后台的位置(例如,GPS跟踪器),请使用Service(http://developer.android.com/reference/android/app/Service.html)

  • 这与使用“onPause()”和“onResume()”有什么不同吗? (2认同)