Android中的线程

vir*_*sir 9 java multithreading android

我目前正在开发Android应用程序,它需要从互联网下载内容.我使用线程来执行该操作,然后调用runOnUiThread方法来更新GUI.

  1. 我在其上放置了一个刷新菜单,如果用户尝试刷新内容,则会创建并启动下载线程.问题是我如何控制线程顺序,我需要接受最新请求的响应并放弃先前的线程请求,如果还有其他请求仍在运行,因为请求参数可能已被用户更改.目前我正在使用threadId来做这件事,当一个线程完成时,它会检查它的threadId,如果它是最新的一个,它然后接受控制并呈现响应.我的问题是,还有其他适当的更好的解决方案吗?
  2. 用户退出应用程序时是否需要停止线程?我记得有些书说不要手动尝试停止线程并等待自己完成是一个很好的做法,是真的吗?我应该通过调用"停止"或"中断"方法来阻止它们吗?
  3. 我在Android中阅读了一些围绕线程的文档并发现了HandlerThread类,它是什么?在什么样的情况下我需要使用它?

Jos*_*ger 4

我不会为每个刷新操作启动一个新线程,而是为所有后台下载工作创建一个线程,循环并下载队列中排列的内容。这可确保您不会同时下载内容并节省资源。

在 GUI 中,只要用户提示您,您只需将刷新请求排队即可,并且可以通过调用HttpRequestBase.aborthttp 方法实例来中止正在运行的下载。后台线程应该接收并捕获 aSocketException并继续处理下一个排队的请求。

要结束后台线程,您只需结束其循环即可。您可以使用LooperHandler类来帮助您完成上述所有操作,HandlerThread您提到的类只是一个方便的类,用于创建具有Looper.

ing 线程的问题interrupt在于它不会使您摆脱阻塞 I/O 请求,并且InterruptException正确处理可能会很复杂。因此,根据具体情况,我会说是的,更好的做法是通过从其方法返回来结束线程run