我想创建一个AIDL服务,由于缺少正确的术语而返回“实时”对象。也就是说,我希望这样的东西能够起作用,
IFoo foo = myService.getFoo(x); // calls to myService service to get an IFoo
IBar bar = foo.getBar(y); // IPC to IFoo to get an IBar
IBaz baz = bar.getBaz(z); // IPC to IBar to get an IBaz
baz.setEnabled(false); // IPC to IBaz to modify the service's copy of IBaz
我希望这是可能的,但我可以找到一个很好的例子。另一种方法是做一些事情,
myService.setBazEnabled(x, y, z, false);
前者是一种更为面向对象的方法,而后者则更具功能性。
感谢。
答案 0 :(得分:1)
只要IFoo
,IBar
和IBaz
都是通过AIDL定义的,那应该可以正常使用。
答案 1 :(得分:0)
在CommonsWare的评论#2中提供明确的建议示例......
首先,定义要从主AIDL接口返回的子AIDL接口
interface IMyService {
IFoo getFoo();
}
IFoo
本身应该是AIDL接口,
interface IFoo {
...
}
在您的IMyService.getFoo()
实现中,构建一个新的绑定器,并将其作为IFoo
接口返回
public class MyService implements Service {
public class FooBinder extends IFoo.Stub {
...
}
public class MyBinder extends IMyService.Stub {
@Override
public IFoo getFoo() {
return IFoo.Stub.asInterface(new FooBinder());
}
@Override
public IBinder onBind() {
return new MyBinder();
}
}