我目前正在开发Android应用,它需要从互联网下载内容。我使用线程来执行该操作,然后调用runOnUiThread方法来更新GUI。
答案 0 :(得分:4)
不是为每个刷新操作启动一个新线程,而是为所有后台下载工作创建一个单独的线程,循环和下载队列中排列的内容。这可确保您不会同时下载内容并节省资源。
在GUI中,您只需在用户提示时排队刷新请求,并可以通过调用http方法实例上的HttpRequestBase.abort
来中止正在运行的下载。后台线程应该接收并捕获SocketException
并继续下一个排队请求。
要结束后台线程,您只需结束其循环。您可以使用Looper
和Handler
类来帮助您完成上述所有操作,您提到的HandlerThread
类只是一个方便的类来创建一个{{3}的线程}。
interrupt
线程的问题在于它不会让您摆脱阻塞的I / O请求,并且正确处理InterruptException
可能会很复杂。所以根据情况,我会说是,最好通过从run
方法返回来结束线程。
答案 1 :(得分:2)
我发现本周的AsyncTask,我在程序的某个地方用AsyncTask替换了Thread,
你有doc&样品在这里,真的很容易使用:
http://developer.android.com/reference/android/os/AsyncTask.html
当我使用线程GUI时锁定,现在它没有锁定。
并且可以取消AsyncTask(但我从不尝试)
答案 2 :(得分:1)
您可以使用IntentService开始后台操作,该服务将作为“工作队列处理器”运行,并将按顺序执行您的呼叫。