Моя активность иногда падает, когда она выходит из поля зрения.Он использует LocationListener
для получения обновлений местоположения и отображения их на экране.Вот соответствующий код.
public class MyActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onStart() {
super.onStart();
lm = (LocationManager) getSystemService(LOCATION_SERVICE);
tv = (TextView) findViewById(R.id.textView1);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
}
@Override
protected void onStop() {
lm.removeUpdates(listener);
tv = null;
lm = null;
super.onStop();
}
private LocationManager lm;
private TextView tv;
private final LocationListener listener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
tv.setText(location.getLatitude() + ", " + location.getLongitude());
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
}
onLocationChanged()
часто вызывается, в то время как tv
является null
, что быстро вызывает NullPointerException
.Я не устанавливаю tv
в null
где-либо, кроме onStop()
, а mStopped
в соответствии с отладчиком соответствует true
.Я подозреваю, что существует состояние гонки, когда сообщения о местоположении ставятся в очередь в Handler
основного потока прямо во время остановки действия.
Такое поведение нигде не задокументировано.Как я могу предотвратить вызов onLocationChanged()
после onStop()
?