次のような AIDL インターフェースを備えたサービスがあります。
interface Bar {
void doStuff();
// ...
void destroySelf();
}
interface Foo {
// ...
Bar createBar();
}
サービスの実装では、スタブは作成されたスタブFooのリストを維持し、スタブでが呼び出されると、このインスタンスはリストから削除されます。BarBardestroySelf()
破棄されたBarインスタンスをクライアントから呼び出せないようにしたいのですが、どうすればよいですか?
このクライアント コードは例外をスローしません。
Bar bar = foo.createBar();
bar.destroySelf();
bar.doStuff(); //I want that to go "boom"
Binder実装を調べたところdestroy()、メソッドから呼び出されるネイティブ メソッドがありますfinalize()が、それはガベージ コレクターが起動することを決定したときにのみ呼び出されます。クライアントがインスタンスのメソッドを呼び出したときにインスタンスにアクセスできるようにBinder、インスタンスへの参照が保持されていないかどうかさえわかりません。BarStub