android: IPC 删除监听器

Nic*_*ick 0 service android ipc

我使用本教程创建了自己的 :remote 服务。它有效,但有一个问题:我无法删除侦听器。轨迹是:

onServiceConnected add listener: net.ServiceGP$1@44930168 
Run Code Online (Sandbox Code Playgroud)

(从我的主要活动中,当我执行以下操作时:

startService(i);
bindService(i, serviceConnection, 0);
Run Code Online (Sandbox Code Playgroud)

然后形成服务:

Adding new listener [net.bgtask.ServiceListener$Stub$Proxy@44916d30]... new listener size = 1
Run Code Online (Sandbox Code Playgroud)

然后我按下后退按钮,然后:

onDestroy of main activity, removing listener: net.ServiceGP$1@44930168
Run Code Online (Sandbox Code Playgroud)

并形成服务:

Removing listener   [net.bgtask.ServiceListener$Stub$Proxy@44917440]... new listener size = 1
Run Code Online (Sandbox Code Playgroud)

奇怪......在活动中我有相同的对象,但在服务中不同。为什么这样?

小智 5

此示例中的问题(比较链接)是列表用于侦听器集合

private List<TweetCollectorListener> listeners = new ArrayList<TweetCollectorListener>();
Run Code Online (Sandbox Code Playgroud)

代替

private RemoteCallbackList<TweetCollectorListener> listeners = new RemoteCallbackList<TweetCollectorListener>();
Run Code Online (Sandbox Code Playgroud)

与相应的

(1) listeners.register(listener);
(2) listeners.unregister(listener);
Run Code Online (Sandbox Code Playgroud)

代替

(1) listeners.add(listener);
(2) listeners.remove(listener);
Run Code Online (Sandbox Code Playgroud)

参数(在我看来)不是对同一个监听器的引用,但 RemoteCallbackList 处理了这个问题。