岩井です。
コールバック処理が終了する前に次のコールバック処理が発生するということは
サービス内でスレッドを利用し、そのスレッド上でbeginBroadcast()をコールしているのでしょうか。
であれば、RemoteCallbackListインスタンスのロックを取得することで実現するのが妥当かと思います。
■サービスの実装がこんな感じの場合
class HogeService extends Service
{
private final RemoteCallbackList<IMyServiceCallback> callbackList
= new RemoteCallbackList<IMyServiceCallback>();
private IMyService.Stub service = new IMyService.Stub()
{
public void unregisterCallback(IMyServiceCallback callback)
throws RemoteException
{
callbackList.unregister(callback);
}
public void registerCallback(IMyServiceCallback callback)
throws RemoteException
{
callbackList.register(callback);
}
}
...
}
■同期処理は、callbackListをロックすることで実現
synchronized (callbackList)
{
int n = callbackList.beginBroadcast();
callbackList.getBroadcastItem(i).echo(Thread.currentThread().getName());
callbackList.finishBroadcast();
}
以上、参考になれば幸いです。