1
我有AIDL接口,這樣的服務:如何銷燬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
實施且存在從finalize()
方法稱爲destroy()
本地方法,但只有當所謂的垃圾收集器決定喚醒。我甚至不確定Binder
的東西沒有保留對BarStub
實例的引用,以便在客戶端調用方法時能夠訪問它們。
選項2是不可行的。在服務方面,業務邏輯迫使我知道從'FooStub'實例實例化的'BarStub'列表。所以'destroySelf'是必要的。 – 2013-03-15 10:29:42