我尝试启动服务并在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()
移至CommSessionManagerService
,onCreate
方法将需要几秒钟才能完成。作为相关说明,我在startCommandUpperM()
函数中创建并启动了一个线程。
答案 0 :(得分:1)
这是因为您的Service
实际上绑定在UiThread上。由于onCreate
也在UiThread上运行,因此您对bindService
的调用会导致Handler.post(Runnable)
在主线程的处理程序上调用。
因此,当bindService
返回时,Service
尚未绑定。
要解决此问题,您应该在ServiceConnection.onServiceConnected()
内使用您的服务代码。