В Android: как вызвать функцию активности из сервиса? - PullRequest
7 голосов
/ 16 мая 2010

У меня есть Activity (A) и Service (S), которые запускаются как A:

Intent i = new Intent();
i.putExtra("updateInterval", 10);
i.setClassName("com.blah", "com.blah.S");
startService(i);

A имеет такую ​​функцию в A:

public void someInfoArrived(Info i){...}

Теперь я хочу вызвать A.someInfoArrived (i) изнутри S. Intent.putExtra не имеет версии, где я мог бы передать ссылку на объект и т.д ... Пожалуйста, помогите!

PS: Обратный путь (опрос S для новой информации) - это НЕ то, что мне нужно. Я нашел достаточно информации о том, как это сделать.

1 Ответ

14 голосов
/ 16 мая 2010

Один из вариантов - переключиться с startService() на bindService() и использовать шаблон локальной привязки. Затем вам нужно, чтобы A вызывал метод на S в какой-то момент, чтобы зарегистрировать прослушиватель или метод обратного вызова. Тогда у S будет что-то, что он может вызвать на A, когда появится некоторая информация. Вы можете увидеть пример проекта для этого здесь .

Кроме того, вы можете оставить startService() на месте и использовать широковещательную рассылку Intent, чтобы позволить S сообщить A о поступлении некоторой информации. Вы можете увидеть пример проекта, демонстрирующего такую ​​трансляцию Intent здесь .

...