我目前正在开发Android应用,它需要从互联网下载内容。我使用线程来执行此操作,然后调用runOnUiThread方法来更新GUI。
最佳答案
与其为每个刷新 Action 启动一个新线程,不如为所有后台下载工作创建一个线程,该线程按队列排列并循环下载内容。这样可以确保您不会同时下载内容,也可以节省资源。
在GUI中,只要用户提示您将刷新请求放入队列中,就可以通过在http方法实例上调用 HttpRequestBase.abort
来中止正在运行的下载。后台线程应接收并捕获SocketException
并继续下一个排队的请求。
要结束后台线程,您只需要结束其循环即可。您可以使用 Looper
和 Handler
类来帮助您完成上述所有工作,您提到的HandlerThread
类只是一个方便的类,用于创建具有 Looper
的线程。
用interrupt
线程的问题是,它不会使您脱离阻塞的I/O请求,并且正确处理InterruptException
可能会很复杂。因此,根据情况我会说是,最好的做法是通过从其run
方法返回来结束线程。