Android: IPC удалить слушателя - PullRequest
0 голосов
/ 02 мая 2011

Я использовал этот учебник , чтобы создать свой собственный: удаленный сервис. Это работает, но с одной проблемой: я не могу удалить слушателя. След:

onServiceConnected add listener: net.ServiceGP$1@44930168 

(из моей основной деятельности, когда я делаю следующее:

startService(i);
bindService(i, serviceConnection, 0);

Тогда сформируйте услугу:

Adding new listener [net.bgtask.ServiceListener$Stub$Proxy@44916d30]... new listener size = 1

Затем я нажимаю кнопку «Назад» и:

onDestroy of main activity, removing listener: net.ServiceGP$1@44930168

И сформировать услугу:

Removing listener   [net.bgtask.ServiceListener$Stub$Proxy@44917440]... new listener size = 1

Странно ... В деятельности у меня один и тот же объект, но в службе разные. ПОЧЕМУ так?

1 Ответ

4 голосов
/ 10 ноября 2011

Проблема в этом примере (ссылка для сравнения) состоит в том, что список используется для коллекции слушателей

private List<TweetCollectorListener> listeners = new ArrayList<TweetCollectorListener>();

вместо

private RemoteCallbackList<TweetCollectorListener> listeners = new RemoteCallbackList<TweetCollectorListener>();

с соответствующим

(1) listeners.register(listener);
(2) listeners.unregister(listener);

вместо

(1) listeners.add(listener);
(2) listeners.remove(listener);

Аргумент (кажется мне) не относится к тому же слушателю, но RemoteCallbackList решает эту проблему.

...