我有一个带有 AIDL 接口的服务,如下所示:
interface Bar {
void doStuff();
// ...
void destroySelf();
}
interface Foo {
// ...
Bar createBar();
}
在服务实现中,Foo存根维护一个已创建Bar存根的列表,并且在Bar存根中,当destroySelf()被调用时,此实例将从列表中删除。
Bar我希望客户不再调用被破坏的实例,我该怎么做?
此客户端代码不会引发任何异常:
Bar bar = foo.createBar();
bar.destroySelf();
bar.doStuff(); //I want that to go "boom"
我查看了Binder实现,并且有一个destroy()从该方法调用的本机finalize()方法,但只有在垃圾收集器决定唤醒时才会调用它。我什至不确定这些Binder东西是否不会保留对BarStub实例的引用,以便在客户端调用一个方法时能够访问它们。