Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:当两个触发器之间的时间非常短时,活动(片段)中的回调会从服务中以相同的值触发_Java_Android_Multithreading_Sockets_Android Service - Fatal编程技术网

Java Android:当两个触发器之间的时间非常短时,活动(片段)中的回调会从服务中以相同的值触发

Java Android:当两个触发器之间的时间非常短时,活动(片段)中的回调会从服务中以相同的值触发,java,android,multithreading,sockets,android-service,Java,Android,Multithreading,Sockets,Android Service,我有一个连接到线程中的套接字的服务。当套接字接收到消息时,它通过(静态)接口在片段中触发回调。现在,当在非常短的时间(.3秒)内收到两条消息时,将触发两次回调,但返回值相同 代码: 在服务中,我声明了如下接口: public interface OnVideoViewTokenReceived { void videoViewTokenReceived(String videoStreamToken, String cameraId); } public static void setO

我有一个连接到线程中的套接字的服务。当套接字接收到消息时,它通过(静态)接口在片段中触发回调。现在,当在非常短的时间(.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;
在线程中,服务连接到套接字并接收消息frm it:

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++){
     ....}
GeneralSocketService.setOnVideoViewTokenReceived(新的GeneralSocketService.OnVideoViewTokenReceived(){
@凌驾
已接收公共无效VideoViewToken(字符串videoStreamToken,字符串camId){

对于(int i=0;我可以尝试使用livedata吗?侦听而不是回调?谢谢@RameshKumar。我真的希望看到纯java存在的问题。我的代码中应该有一些缺陷。这也是java,但有一些观察家。如果需要,任何方法都可以添加延迟,或者在方法调用中添加类似同步的锁