我使用这个tutorial来创建我自己的:远程服务。它有效,但有一个问题:我无法删除监听器。 跟踪是:
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
很奇怪......在活动中我有相同的对象,但在服务中有不同的对象。 为什么这样?
答案 0 :(得分:4)
此示例(比较链接)中的问题是列表用于侦听器集合
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);
参数(在我看来)不是对同一个Listener的引用,而是RemoteCallbackList处理这个问题。