У меня есть LocalService, который предоставляет Binder с некоторыми API. Я создаю Service Listener, вот так:
if (dataServiceListener == null) {
dataServiceListener = new DataServiceListener();
mainActivity.getApplicationContext().bindService
(new Intent(mainActivity, LocalService.class),
dataServiceListener.svcConn, mainActivity.BIND_AUTO_CREATE);
}
После того, как я вызываю метод, который предоставляет Binder
в dataServiceListener
, я получаю ответ в методе dataServiceListener
onResult()
. До этого момента никаких проблем не возникало, все работает.
Некоторая проблема возникает, когда я закрываю Activity, которая ожидает обратного вызова Service Listener, и немедленно снова открываю ее. Несмотря на то, что я восстанавливаю dataServiceListener
в onCreate()
, я получаю два обратных вызова вместо одного: старый от уничтоженной Деятельности и последний (правый); Таким образом, результаты смешиваются в пользовательском интерфейсе.
Есть ли способ сообщить службе или прослушивателю службы, что после завершения действия необходимо избегать обратных вызовов. Или, может быть, даже уничтожить объекты ServiceListener.
Я думаю, что это проблема, которую Марк Л. Мерфи (Commonsware) описал в «Руководстве занятого программиста по разработке Android»:
Самым большим подвохом является то, что задание отвлекает слушателей, когда оно выполнено.
Как я могу это сделать? Есть ли способ избавиться от бесполезных слушателей, когда действие заканчивается?
Спасибо!