Вы должны быть осторожны с вашим слушателем местоположения и жизненными циклами вашей активности.
Если вы запрашиваете обновления местоположения в методе onCreate()
вашей деятельности, обязательно отмените его регистрацию позже, например, onDestroy()
, хотя, на мой взгляд, было бы лучше зарегистрировать его onStart()
и отменить его onStop()
.
Похоже, что ваш слушатель местоположения вызывает метод для действия, которое уже может быть мертвым.
Если вы планируете реализовать обнаружение местоположения в более чем одном действии, может быть целесообразно создать базовый класс, содержащий прослушиватель, вызывающий абстрактный метод при обновлении местоположения. Вы можете продвинуть его дальше, переопределив onStart()
для регистрации слушателя и onStop()
для отмены регистрации слушателя. Хотя не забывайте вызывать супер-конструктор как в этом абстрактном классе, так и в дочерних классах.
Надеюсь, это поможет и не слишком запутанно!
РЕДАКТИРОВАТЬ:
Пример кода приведен ниже:
public abstract class LocationActivity extends Activity {
private LocationListener mLocationListener;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(final Location location) {
updateLocation(location);
}
@Override
public void onStatusChanged(final String provider,
final int status, final Bundle extras) {
}
@Override
public void onProviderEnabled(final String provider) {
}
@Override
public void onProviderDisabled(final String provider) {
}
};
}
@Override
protected void onStart() {
super.onStart();
// register your listener with the location manager
}
@Override
protected void onStop() {
super.onStop();
// unregister your listener from the location manager
}
protected abstract void updateLocation(Location location);
}