我有一个服务连接到线程中的套接字。当套接字接收到消息时,它会通过(静态)接口触发片段中的回调。现在,当在很短的时间内(0.3 秒)收到两条消息时,回调会被触发两次,但返回值相同。
代码: 在服务中,我声明了这样的接口:
public interface OnVideoViewTokenReceived {
void videoViewTokenReceived(String videoStreamToken, String cameraId);
}
public static void setOnVideoViewTokenReceived(OnVideoViewTokenReceived _onVideoViewTokenReceived) {
Log.d(TAGSHRDL, "_onVideoViewTokenReceived set");
onVideoViewTokenReceived = _onVideoViewTokenReceived;
}
public static OnVideoViewTokenReceived onVideoViewTokenReceived;
在一个线程中,服务连接到一个套接字并从它接收消息:
networkThread = new Thread() {
@Override
public void run() {
...
socket.addListener(new WebSocketAdapter() {
@Override
public void onTextMessage(WebSocket websocket, String message) throws Exception {
....
streamToken = messageJSON.getJSONObject("payload").getString("token");
Handler handler = new Handler(Looper.getMainLooper()); //!!!Without this, token will not be received in the fragment
handler.post(new Runnable() {
@Override
public void run() {
onVideoViewTokenReceived.videoViewTokenReceived(streamToken, camId);
}
});
}
}
};
networkThread.start();
并在我的片段中回调:
GeneralSocketService.setOnVideoViewTokenReceived(new GeneralSocketService.OnVideoViewTokenReceived() {
@Override
public void videoViewTokenReceived(String videoStreamToken, String camId) {
for (int i = 0; i<9 ; i++){
....}
现在在我的片段中,一切正常,但是当两条消息之间的时间很短时,回调会被触发两次,但返回值相同videoStreamToken。我也用过synchronized(),但我没有运气。我应该怎么办?