Android: привязка к удаленному сервису успешна только при отладке сервиса

1

Я написал библиотеку, подключающуюся к удаленной службе, которая вызывает

    return context.bindService(bindIntent,
            serviceConnectionSmartCard, Context.BIND_AUTO_CREATE);

с контекстом является ApplicationContext и serviceConnectionSmartCard, являющийся моим пользовательским ServiceConnection

public void onServiceConnected(ComponentName className, IBinder service) {
    synchronized (this) {
        if (waitForConnection) {
            waitForConnection = false;
        } else {
            return;
        }
    }
    if(service == null) {
        Log.w(TAG, "Binding to Service failed.");
        smartCardReaderService.onConnected(null);
    } else {
        if (D) Log.d(TAG, "Attached to Server.");
        IConnectionService connectionService = IConnectionService.Stub.asInterface(service);
        smartCardReaderService.onConnected(connectionService);
    }
}

И на стороне обслуживания у меня есть следующее в onBind():

public IBinder onBind(Intent intent) {
    if (D) Log.d(TAG, "onBind");
    android.os.Debug.waitForDebugger();
    return iConnectionService.asBinder();
}

iConnectionService - это реализация моего файла AIDL.

Теперь моя проблема: он работает до тех пор, пока я отлаживаю службу (устанавливаю точку останова в операторе return), однако она не работает, когда я отлаживаю действие вместо этого. Служба ServiceConnection никогда не возвращается.

Кстати: я звоню

startActivityForResult(...);

вызов удаленного действия в Activity.onCreate. Это может быть проблема? Я просто не знаю, как отлаживать такое странное поведение...

Заранее спасибо.

  • 0
    Неважно. android.os.Debug.waitForDebugger (); была проблема. Я действительно не думал, что это сломает мою программу. : / Прокомментировал это и теперь все работает как шарм.
  • 0
    Упомяните свое подробное решение в ответе и примите свой собственный ответ, это может помочь другим в будущем.
Показать ещё 1 комментарий
Теги:
connection
debugging
service

1 ответ

0
Лучший ответ

Решение было довольно простым. Просто раскованный

android.os.Debug.waitForDebugger(); 

так как он будет молча ждать отладчика, если он не будет запущен приложением отладки, чего никогда не произойдет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню