0

次のコードがあり、 ReadUnsignedByte() 関数を使用していますが、ハングして、アプリケーションをハングさせる原因となるものを何も返しません。try catch を使用しましたが応答がありません。この場合はどうすればよいですか?

private int getEndOfSeqeunce(DataInputStream in, byte[] sequence) throws TimeoutException {
    int seqIndex = 0;
    byte c = -99;
    for(int i=0; i < FRAME_MAX_LENGTH; i++) {
        Log.v("DataInputStream", ""+in);
        try {
            c = (byte) in.readUnsignedByte(); // Stuck here ... No response at this line which hangs the Android application.
            Log.v("C ::::::::UNSIGNE::readUnsignedByte::::::::", ""+c);
            if(c == sequence[seqIndex]) {
                seqIndex++;
                if(seqIndex == sequence.length) return i + 1;
            } else seqIndex = 0;

        } catch (IOException e) {
            e.printStackTrace();
            i = FRAME_MAX_LENGTH;
            Activity ac = (Activity) cox;   
            }

    }
    return -1;
}
4

1 に答える 1

1

これはブロッキング呼び出しであり、タイムアウトを設定することはできません。データを返すか、例外で失敗する必要があります。ソケットから読み取っている場合は、読み取りタイムアウトに達するまでブロックされます (設定されている場合)。UI をハングさせないために、これを別のスレッドで実行することをお勧めしますが、それでもブロックされます。これが通信プロトコルの場合は、どこかに問題があり、送信されていないデータを予期している可能性があります。

于 2012-11-26T08:47:47.087 に答える