0

我知道如何接收数据包,但我希望我的应用程序始终检查收到的数据包

public void controlListener(){
    control.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub


            switch(receiveData().charAt(0)){
            case '1':{
                Log.d("","1");
                setVisibility(View.INVISIBLE);
                control.setVisibility(View.VISIBLE);
                break;
            }
            case '3':{
                Log.d("","3");
                setVisibility(View.VISIBLE);
                control.setVisibility(View.INVISIBLE);
                Thread thread = new Thread()
                {
                    @Override
                    public void run() {
                        try {



                            Log.d("", "here");
                            runOnUiThread(new Runnable() {
                                public void run() {
                            switch(receiveData().charAt(0)){
                            case '1':{
                                Log.d("", "1");
                                setVisibility(View.INVISIBLE);
                                control.setVisibility(View.VISIBLE);
                                break;
                            }
                            case '3':{
                                Log.d("", "3");
                                setVisibility(View.VISIBLE);
                                control.setVisibility(View.INVISIBLE);
                                break;
                            }
                            case '4':{
                                Log.d("", "4");
                                setVisibility(View.INVISIBLE);
                                control.setVisibility(View.VISIBLE);
                                break;
                            }
                            default:{
                                Log.d("","not expecting this");
                            }
                            }
                                }
                            });


                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                };

                thread.start();

                break;
            }
            case '4':{
                Log.d("","4");
                setVisibility(View.INVISIBLE);
                control.setVisibility(View.VISIBLE);
                break;
            }
            default:{
                Log.d("","not expecting this");
            }
            }



        }
    });
}

我收到 3 后我想做的事情也继续接收,直到我收到 1 或 4。并允许用户在它为 3 时使用按钮。如果 1 或 4 使所有按钮在收到之前不可见一个 3。

4

1 回答 1

0

所以正如你所说,你必须使用工作线程来永久执行

DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);

而且在该线程中,您还需要一个处理程序,它应该在 UI 线程上创建,并为您的 Activity 提供一个 WeakReference,以防止内存泄漏并能够更新 UI。因此,当您收到新包裹时,您可以这样做

handler.post(new Runnable() {

     public void run() {
          // do something with received string and activity
     }
}
于 2013-07-25T22:46:27.380 回答