次のような 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