Я получаю исключение исключающего указателя в строке mService.start() при попытке привязки к уже запущенной службе. Я делаю то же самое из разных видов деятельности (где начинается сервис), все идет правильно. Все эти действия являются частью одного приложения.android bindservice
Как вы думаете, что я делаю неправильно?
public class RouteOnMap extends MapActivity{
private static final int NEW_LOCATION = 1;
private static final int GPS_OFF = 2;
private MapView mMapView;
private ILocService mService;
private boolean mServiceStarted;
private boolean mBound;
private Intent mServiceIntent;
private double mLatitude, mLongitude;
private ServiceConnection connection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder iservice) {
mService = ILocService.Stub.asInterface(iservice);
mBound = true;
}
public void onServiceDisconnected(ComponentName className) {
mService = null;
mBound = false;
}
};
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.mapview);
mMapView = (MapView) findViewById(R.id.mapview);
mMapView.setBuiltInZoomControls(true);
mServiceIntent = new Intent();
mLatitude = 0.0;
mLongitude = 0.0;
mBound = false;
}
@Override
public void onStart(){
super.onStart();
mServiceIntent.setClass(this, LocationService.class);
//startService(mServiceIntent);
if(!mBound){
mBound = true;
this.bindService(mServiceIntent, connection, Context.BIND_AUTO_CREATE);
}
}
@Override
public void onResume(){
super.onResume();
try {
mService.start();
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onPause(){
super.onPause();
if(mBound){
this.unbindService(connection);
}
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
спасибо. Сработало обращение к mService.start() из onServiceConnected. Вы рекомендуете всегда вызывать методы mService из onServiceConnected()? – mnish
Пока не вызывается 'onServiceConnected()', 'mService' является' null'. Следовательно, вы не хотите вызывать методы в 'mService', пока не будете уверены, что' onServiceConnected() 'будет вызван. Например, к моменту, когда пользователь может щелкнуть что-то, 'mService', вероятно, готов. Однако 'onResume()' слишком скоро - ваш запрос 'bindService()', возможно, еще не обработан. – CommonsWare
большое спасибо за вашу помощь – mnish