更新时间:2023-10-20 22:39:04
我找到了解决办法。
正如 RemoteCallbackList
文档,如果注册的回调的过程中消失了,这个类会照顾从列表中自动删除它。如果你想要做更多的工作,在这种情况下,你可以创建一个实现onCallbackDied(E)方法的子类。
所以,我创建了一个子类 RemoteCallbackList
接口 IRemoteCallbackDied
:
So, i created a subclass for RemoteCallbackList
and interface IRemoteCallbackDied
:
private interface IRemoteCallbackDied<E extends IInterface> {
public void remoteCallbackDied(E callback, Object cookie);
}
private final class RemoteCallbackListWithDiedCB<E extends IInterface> extends RemoteCallbackList<E> {
IRemoteCallbackDied<E> mRemoteCallbackDied;
public RemoteCallbackListWithDiedCB(IRemoteCallbackDied<E> mRemoteCallbackDied)
{
this.mRemoteCallbackDied = mRemoteCallbackDied;
}
@Override public void onCallbackDied(E callback, Object cookie){
super.onCallbackDied(callback, cookie);
this.mRemoteCallbackDied.remoteCallbackDied(callback, cookie);
}
}
然后,我创建实施 IRemoteCallabackDied
:
private final IRemoteCallbackDied<IModConnClient> mRemoteCallbackDied = new IRemoteCallbackDied<IModConnClient>() {
public void remoteCallbackDied(IModConnClient mModConnClient, Object cookie)
{
Log.v("my_tag", "remote callback died!");
/*
* Some code
*/
}
};
和,终于,我的回调列表的定义就是这样:
and, finally, my callback list is defined just like that:
private RemoteCallbackListWithDiedCB<IModConnClient> mClients = new RemoteCallbackListWithDiedCB<IModConnClient>(mRemoteCallbackDied);