0

こんにちは、私は ANandroid で tcp ソケット接続を備えたクライアント サーバー アーキテクチャを持っています。サービス 'onStart()' にソケット リスナー スレッドがあります。どういうわけか接続が失われた後、サーバーに再接続したい。この問題をどのように設計できますか? いくつかの方法を試しましたが、サービスの開始時に無限ループに陥りました...答えてくれてありがとう。

リスナーコードはこんな感じ…

@Override
    public void onStart(final Intent intent, int startId) {

        super.onStart(intent, startId);
        Log.d(TAG, "onSTARTED!!");
        if(!mySocket.isConnected()){
            connectiontoServer();
        }

        clientListenerThread = new Thread(new Runnable() { // TCP Socket Listener 

            public void run() {
                String line = new String();

                try {
                    while(mySocket.isConnected() && ((line = in.readLine()) != null)){
                        try{
                            Log.d(TAG, "service onStart-while true");        
                            String[] tokens = line.split(MessageClass.ayirac);
                            Log.d(TAG+"-MSG", line);
                            tokens = line.split(MessageClass.ayirac);
                            int msgCase = Integer.parseInt(tokens[0]);

                                 switch(msgCase){

                                    case -5:
                                        responseEntrance(line);
                                        break;

                                    case 1:
                                        responseLogin1(line);
                                        break;
                                    case 2:
                                        responseRegister2(tokens);
                                        break;
                                    default:
                                        break;

                                 }
                            }catch (Exception e) {
                                e.printStackTrace();
                                Log.d(TAG, "CATCH1 !");
                                continue;
                            }
                        }
                    }catch(IOException e){
                        e.printStackTrace();
                        if(!mySocket.isConnected()){
                            Log.d(TAG,"ConnectionDOWN! in catch2");
                            stopAndDestroyMyActivity();
                        }
                    }

                Log.d(TAG, "LISTENING FINISH!");
                stopAndDestroyMyActivity();
                }
        });
        clientListenerThread.start();
    }
4

1 に答える 1

0

しばらくしてから接続したい場合は、Timer クラスを使用します: http://developer.android.com/reference/java/util/Timer.html

于 2012-04-28T03:04:39.440 に答える