我正在尝试在我的服务和活动设置之间进行双向通信。为此,我像往常一样启动我的服务,在我的 Activity 中将回复设置为 Messenger 的消息发送到我的服务,然后将其发送到我的服务。这样我就有了双向发送消息的参考。这是我的 Activty 中的一些相关代码:
private Messenger mService = null;
private final Messenger mMessenger = new Messenger(new IncomingHandler());
private ServiceConnection mConnection = new ServiceConnection()
{
public void onServiceConnected(ComponentName className, IBinder service)
{
mService = new Messenger(service);
mBound = true;
}
public void onServiceDisconnected(ComponentName className)
{
mService = null;
mBound = false;
}
};
private void initMessenger()
{
Message messageHandler = Message.obtain(null, NetworkService.MSG_GET_HANDLER, 0, 0);
messageHandler.replyTo = mMessenger; //Set the replyTo to give a reference
try
{
mService.send(messageHandler);
}
catch(RemoteException e)
{
e.printStackTrade();
}
catch(NullPointerException e)
{
e.printStackTrace(); //Why!!!
}
}
public void onCreate()
{
...
//Create the intent to start the network service
Intent iService = new Intent(this, NetworkService.class);
int[] connectionConfig = {CONNECTION_BT};
iService.putExtra(CONNECTION_CONFIG, connectionConfig);
bindService(iService, mConnection, Context.BIND_ABOVE_CLIENT);
startService(iService);
initMessenger();
}
当我尝试调用 mService.send() 时抛出 NullPointerException,很可能是因为当时 mService 为空。如果我将 initMessenger() 代码移动到按钮的 OnClickListener 中,它可以正常工作,这就是混淆的地方。我是否应该在启动服务后等待一段时间才能使用它?