Я не уверен, как решить эту проблему, но в одном действии я вызываю startService, а затем немедленно вызываю для запуска следующего действия.
Это работает, служба запускается и начинает обрабатывать данные какожидается.
Я перехожу к следующему действию, и в onResume
я вызываю AsyncTask
, чтобы связать службу.
Итак, основной поток состоит в том, что я вызываю AsyncTask,bindService
возвращает false, поэтому mConnection никогда не вызывается.
Итак, проблема в том, почему bindService
возвращает false?
Причина, по которой я поместил привязку в AsyncTask, заключается в том, что у меня былопоток спит в течение 10 секунд перед привязкой, чтобы посмотреть, нужно ли сначала запустить службу.
Я также запустил службу внутри этой операции, сначала в методе onCreate, и поэтому подождал 10 секунд, но bindService
все еще возвращает ложь.
private class BindServiceTask extends AsyncTask<Void, Void, Boolean> {
protected Boolean doInBackground(Void... params) {
return bindService(
new Intent(IMyCallback.class.getName()),
mConnection, Context.BIND_AUTO_CREATE);
}
protected void onPostExecute(Boolean b) {
if (b) {
Log.i(TAG, "onResume - binding succeeded");
Toast.makeText(mContext, "Bound to service succeeded",
Toast.LENGTH_LONG).show();
} else {
Log.i(TAG, "onResume - binding failed");
Toast.makeText(mContext, "Bound to service failed",
Toast.LENGTH_LONG).show();
}
}
}
private IMyCallback mCallback = new IMyCallback.Stub() {
@Override
public void dataChanged(double[] info) throws RemoteException {
mHandler.sendMessage(mHandler.obtainMessage(LOCATION_MSG, info));
}
};
IMyService mIRemoteService;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
Log.i(TAG, "onServiceConnected");
mIRemoteService = IMyService.Stub.asInterface(service);
try {
Log.i(TAG, "registering callback");
mIRemoteService.registerCallback(mCallback);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
}
public void onServiceDisconnected(ComponentName className) {
Log.e(TAG, "Service has unexpectedly disconnected");
mIRemoteService = null;
}
};