您可以在另一个 AIDL 中定义回调。
package ...;
interface XService {
...
void startX(String path, XServiceCallback callback);
}
在另一个aidl文件中:
package ...;
interface XServiceCallback {
void xReady(int errCode, String text);
}
但是回调将被异步调用,因此您必须使用 Handler.post(Runnable)。
另一种方法是使用 Runnable 在 UI 线程上重新发布自身(通过postDelayed())并轮询进度,例如每 0.2 秒。
在这两种情况下,您都必须记住服务或客户端可能会死掉。
至于代码,你拿一些远程服务的例子(在'net中有很多),并在客户端添加如下内容:
XServiceCallback mServiceCallback = new XServiceCallback.Stub() {
@Override
public void xReady(final int errCode, final String text) throws RemoteException {
handler.post(new Runnable() {
@Override
public void run() {
// use the result
}
});
}
};
您的客户端将此回调传递给服务,服务调用它,您在客户端的方法被调用。