private static class StopRecListenerThread extends Thread {
SpeechRecognizer recognizer;
StopRecListenerThread(SpeechRecognizer recognizer) {
this.recognizer = recognizer;
}
@Override
public void run() {
if (!this.recognizer.stop())
Log.d(TAG, "StopRecListenerThread: listener was not stopped");
else
Log.d(TAG, "StopRecListenerThread: listener was stopped");
}
}
我有一个需要停止的对象,但无法在主线程上完成。我将对象传递给静态
Thread
类并从那里停止它。这是 Thread
的有效用途还是我应该恢复为 AsyncTask
?我试图更好地理解Thread
。
仅使用
Thread
即可获得相同的结果。 AsyncTask
是 Thread
上的方便包装纸。鉴于 Android 要求仅从 UI 线程调用 UI 相关方法,AsyncTask
提供了向 UI 线程传达工作状态(onProgressUpdate
、onPostExecute
等)的方法。使用 Thread 实现,您可能需要使用 Handler
才能获得相同的结果。这两种解决方案都不关心 Android 生命周期,因此如果您的后台线程工作需要一些时间(内存泄漏),请小心传递 Activity 上下文等。查看 AsyncTask 文档/源代码。
如今,RxJava 或 Kotlin 协程等解决方案已成为大多数开发人员的解决方案。可能是因为比较方便吧。