Я нашел решение.
Как указано в RemoteCallbackList
документации , " Если процесс зарегистрированного обратного вызова завершится, этот класс позаботится об его автоматическом удалении изсписок. Если вы хотите выполнить дополнительную работу в этой ситуации, вы можете создать подкласс, который реализует метод onCallbackDied (E)."
Итак, я создал подкласс для RemoteCallbackList
и интерфейс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
*/
}
};
и, наконец, мой список обратных вызовов определен так:
private RemoteCallbackListWithDiedCB<IModConnClient> mClients = new RemoteCallbackListWithDiedCB<IModConnClient>(mRemoteCallbackDied);