服务绑定到活动

Mac*_*rse 2 android

这是我的代码:

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;
          }
    }
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它会在此行中获得NullPointerException:

serviceBinder.somethingThatTakesTooMuch();
Run Code Online (Sandbox Code Playgroud)

syn*_*nic 5

onStart在与服务的连接完成之前调用您.这不是即时的.

您只能保证在调用onServiceConnected后连接服务.只有这样才能在serviceBinder上调用方法.

尝试调用serviceBinder.somethingThatTakesTooMuch()上线后,serviceBinder = ((Servicio.MyBinder)service).getService();