如何在Runnable中中断单个持久命令

时间:2014-12-17 04:24:49

标签: android multithreading ocr

我的Java中有一个相当持久的命令;比方说,平均运行时间为20秒。这是对Tesseract OCR库的调用,该库在图像上运行其OCR算法。

String recognizedText = baseApi.getUTF8Text();

我将它封装在Runnable中,这样它就不会导致UI线程挂起,但我也希望用户能够通过按下按钮来取消OCR。

理想情况下,我希望它能够运行

baseApi.end()

一旦按下按钮,但是我没有看到如何使用myThread.interrupt这样做,因为我无法看到检查Thread.currentThread()。isInterrupted()。我可以在

中封装baseApi.getUTF8Text()调用
while (!Thread.currentThread().isInterrupted()) {
...
}

阻止,但由于线程只需在baseApi.getUTF8Text()上花费20秒,它甚至不会注意到被中断的标志被设置为true,直到它完成OCR算法为止。

有没有办法中断/停止这个线程而不需要检查中断的标志,或者某种方式这样做不会挂起等待baseApi.getUTF8Text()完成?如果我在这里不清楚,请告诉我。

全部谢谢!

1 个答案:

答案 0 :(得分:1)

您是否尝试使用AsyncTask?这听起来就像你需要的那样,还有一个取消方法和一个isCancelled()方法。