Android Binder文档有一个关于如何通过Binder接口传递对象Rect的简单示例,如果对象本身有一些也由AIDL接口定义的方法,我想知道如何进行建模?
例如,项目A拥有MusicStoreManager,项目B拥有MusicStore和Music,交互是通过Binder IPC。我正在使用IMusicStore.aidl定义了一个方法“IMusic getMusic(int musicId)”,而IMusic.aidl定义了一个方法“byte [] getMusicData(int from,int to)”,但我被困在这里:
如何对项目B上的Music类,IMusic接口和IMusic.stub进行建模?
getMusic()方法是否应该在以下代码中返回IMusic.Stub实例或Music实例?
如何理解IMusic.Stub?
Music类必须实现IMusic接口以及Parcelable吗?
非常感谢 - 我真的很困惑。
public class MusicStoreService extends Service {
...
protected static final IMusicStore.Stub store = new IMusicStore.Stub() {
...
public IMusic getMusic(int id) throws RemoteException {
return new Music(id); // or return new IMusic.Stub() ???
}
}
...
protected static final IMusic.Stub music = new IMusic.Stub() {
...
public byte[] getMusicData(int from, int to) throws RemoteException {
// open the associated file, read the data within range, return it back.
}
}
...
}
public class Music extends Object implements Parcelable, IMusic {
...
public byte[] getMusicData(int from, int to) throws RemoteException {
// open the associated file, read the data within range, return it back.
}
...
}
答案 0 :(得分:0)
好吧,我可以告诉你一个有用的配方:对于通过AIDL定义的接口,总是创建.Stub
类的实例。不要在其他类上随机应用接口。
例如,项目A拥有MusicStoreManager,项目B拥有MusicStore和音乐
项目B应该创建IMusicStore.Stub
和IMusic.Stub
的子类。 MusicStoreService
会从IMusicStore.Stub
返回onBind()
类的实例,因此项目A可以通过IMusicStore
获取bindService()
代理。 getMusic()
类上IMusicStore.Stub
的实现将返回IMusic.Stub
类的实例。