Как получить IBinder / ServiceConnection / onServiceConnected при запуске службы с помощью startService? - PullRequest
3 голосов
/ 12 октября 2011

Я искал способ получить ServiceConnection, когда я запускаю свою Службу, используя startService (...).

Я не нашел способа, поэтому немного искал и обнаружил следующее: Нужно ли каждому действию привязываться к сервису и что происходит, когда он был создан с помощью startService ()

Там, Commonsware говорит, что не имеет значения, если я вызываю bindService после вызова startService.

Поэтому я подумал, что сначала я запускаю startService (...), а затем сразу послеbindService (...) (так что вызывается onServiceConnected).Но затем Service.onCreate выполняется дважды.Возможно, потому что startService еще не «закончен» ...?

Вопрос в том, как мне получить ссылку на мою Службу (IBinder), т.е.как заставить onServiceConnected срабатывать, если я запускаю мой Сервис с помощью startService?

--- EDIT ---

Я все еще хочу знать любые ответы и идеи, которые вы могли быиметь.Я сделал «хак», чтобы обойти это:

Я просто сделал статическую ссылку (в SRef.java у меня есть public static IBinder myBinder = null), а в моем Service.onCreate я просто делаю

SRef.myBinder = myBinder;

Мне это не кажется правильным, поэтому любые другие идеи о том, как он должен работать, будут оценены.

1 Ответ

0 голосов
/ 12 октября 2011

Я использую ту же самую технику (служба клиента samba), onCreate никогда не вызывается дважды для меня, и я получаю связыватель (посредством обратного вызова соединения), как я и ожидал. Новое начало действия также не запускает onCreate, поскольку предыдущий startService уже выполнил запуск службы.

Вот мой код (может быть тривиальным, но, возможно, это поможет):

Активность (onCreate):

startService(new Intent(this, SambaService.class));
bindService(new Intent(this, SambaService.class), sambaServiceConnection,
        Context.BIND_AUTO_CREATE);

Услуги:

private ServiceBinder mServiceBinder = new ServiceBinder();

public class ServiceBinder extends Binder {
    public SambaService getService() {
        return SambaService.this;
    }
}

public IBinder onBind(Intent intent) {
    return mServiceBinder;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...