【问题标题】:How to give timeout for process in Java and Android for ReadUnsignedByte()如何在 Java 和 Android 中为 ReadUnsignedByte() 的进程设置超时
【发布时间】:2012-11-13 17:01:19
【问题描述】:

我有以下代码,我使用 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;
}

【问题讨论】:

  • 没有响应,它不打印任何东西,我试图记录它但它没有到达下一行。
  • datainputstream 包装的是什么? Log.v("数据输入流", ""+in);你没有打印出来吗?
  • 为了确保您不会挂起您的应用程序:使用 AsyncTask :)
  • 我使用了 AsyncTask,但它也会挂起 UI,因为我在等待 AsyncTask 的结果

标签: android exception timeout


【解决方案1】:

这是一个阻塞调用,您不能设置超时,它必须返回数据或失败并出现异常。如果您正在从套接字读取,它将阻塞,直到达到读取超时(如果已设置)。您可能希望在单独的线程中运行它以不挂起 UI,但它仍会阻塞。如果这是针对通信协议的,那么您可能在某些地方遇到了问题,并且正在等待未发送的数据。

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 2012-11-11
    • 1970-01-01
    • 2012-12-23
    • 2018-07-08
    • 2021-07-03
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多