onCreate of Activity中的Android启动服务问题

时间:2014-02-19 13:15:27

标签: android service android-activity oncreate

我尝试启动服务并在Activity的onCreate()方法中绑定到该服务。当我尝试从commSessionManagerService.startCommandUpperM()之后的服务调用函数时,会发生NullPointerException。这是我用来启动服务并绑定到它的代码:

    Intent startIntent = new Intent(this, CommSessionManagerService.class);
    startService(startIntent);
    Intent bindIntent = new Intent(this, CommSessionManagerService.class);
    bindService(bindIntent, conn, Context.BIND_AUTO_CREATE);

如果我将startCommandUpperM()中的函数onStartCommand()移至CommSessionManagerServiceonCreate方法将需要几秒钟才能完成。作为相关说明,我在startCommandUpperM()函数中创建并启动了一个线程。

1 个答案:

答案 0 :(得分:1)

这是因为您的Service实际上绑定在UiThread上。由于onCreate也在UiThread上运行,因此您对bindService的调用会导致Handler.post(Runnable)在主线程的处理程序上调用。

因此,当bindService返回时,Service尚未绑定。 要解决此问题,您应该在ServiceConnection.onServiceConnected()内使用您的服务代码。