我有一个带有 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
实例的引用,以便在客户端调用一个方法时能够访问它们。