这是我的代码:

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();

    @Override
            public IBinder onBind(Intent intent) {
    return binder;
    }

    public int somethingThatTakesTooMuch() {
        return 1;
    }

    public class MyBinder extends Binder {
          Servicio getService() {
            return Servicio.this;
          }
    }

当我运行它时,
它在这行中得到一个nullpointerexception:
serviceBinder.somethingThatTakesTooMuch();

最佳答案

在完成与服务的连接之前,正在调用您的onStart。这不是即时的。
只有在调用onServiceConnect之后,才能保证服务已连接。只有这样,才能调用ServiceBinder上的方法。
尝试在serviceBinder.somethingThatTakesTooMuch()之后拨打serviceBinder = ((Servicio.MyBinder)service).getService();电话

09-27 12:23