This is my code:
public class MainActivity extends Activity {
private ComponentName mService;
private Servicio serviceBinder;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
serviceBinder = ((Servicio.MyBinder)service).getService();
}
public void onServiceDisconnected(ComponentName className) {
serviceBinder = null;
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent bindIntent = new Intent(this, Servicio.class);
bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onStart() {
serviceBinder.somethingThatTakesTooMuch();
super.onStart();
}
public class Servicio extends Service {
private final IBinder binder = new MyBinder();
开发者_C百科 @Override
public IBinder onBind(Intent intent) {
return binder;
}
public int somethingThatTakesTooMuch() {
return 1;
}
public class MyBinder extends Binder {
Servicio getService() {
return Servicio.this;
}
}
When I run it, It get a NullPointerException in this line:
serviceBinder.somethingThatTakesTooMuch();
Your onStart
is being called before the connection to the service is complete. It's not instant.
You can only guarantee that the service is connected AFTER your onServiceConnected is called. Only then can you call methods on serviceBinder.
Try calling serviceBinder.somethingThatTakesTooMuch()
on the line after serviceBinder = ((Servicio.MyBinder)service).getService();
精彩评论