Поток, используемый для обратного вызова ServiceConnection (Android) - PullRequest
2 голосов
/ 11 мая 2010

Я разрабатываю действие, связанное с локальной службой (в разделе Создание действия):

bindService(new Intent(this, CommandService.class), svcConn, BIND_AUTO_CREATE);  

Я хотел бы иметь возможность вызывать методы через IBinder в моих методах жизненного цикла, но не могу быть уверен, что onServiceConnected был вызван до этого. Я подумываю справиться с этим путем добавления своего рода очереди в реализации ServiceConnection, чтобы вызовы методов (шаблон команд) выполнялись после установления соединения.

Мои вопросы тогда :

  1. Это глупо, есть ли лучшие способы? :)
  2. Есть ли какая-либо спецификация, для которой поток будет использоваться для выполнения обратных вызовов ServiceConnection? Если говорить более конкретно, нужно ли беспокоиться о синхронизации структуры данных очереди?

Редактировать - что-то вроде:

public void onServiceConnected(ComponentName name, IBinder service) {
    dispatchService = (DispatchAsync)service;

    for(ExecutionTask task : queue){
        dispatchService.execute(task.getCommand(), task);
    }
}

1 Ответ

0 голосов
/ 11 мая 2010

Существуют ли какие-либо спецификации, для которых поток будет использоваться для выполнения Обратные вызовы ServiceConnection?

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

Более точно, мне нужно беспокоиться о синхронизации очереди структура данных

Это зависит от того, где вы добавляете объекты в очередь. Если это только из основного потока приложения, то не должно быть конфликтов, AFAIK.

...