0

我有一个服务连接到线程中的套接字。当套接字接收到消息时,它会通过(静态)接口触发片段中的回调。现在,当在很短的时间内(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(),但我没有运气。我应该怎么办?

4

0 回答 0