我的问题很简单,我正在寻找有关Android中多线程和网络的有用教程的建议或链接。我看过的每个例子都使用AsyncTask。我想知道的是,您是否可以通过线程和处理程序获取和使用数据?
我知道HTTP请求必须在新线程上完成,否则你会得到NetworkOnMainThreadException,但我想使用线程和处理程序的原因是因为我希望用来自其他线程的所述数据更新UI。
我不是真的在代码之后,只是指向正确的方向。
答案 0 :(得分:1)
我想知道的是,您是否可以通过线程和处理程序获取和使用数据?
是。网络操作只需在后台Thread
上完成,无论是使用doInBackground()
AsyncTask
还是创建新Thread
。查看Painless Threading和Processes and Threads
我希望用其他线程中的所述数据更新UI。
无论您使用什么,仍然需要更新主UI
上的Thread
。使用除AsyncTask
之外的任何其他方法doInBackground()
可以非常轻松地完成此操作(onPreExecute()
,onProgressUpdate()
,onPostExecute()
都在主{{1}上运行}})。
答案 1 :(得分:1)
Android中的网络操作可以通过以下任何方式完成。
我应该何时使用此选项?
答案 2 :(得分:0)
认为Threads
与常规代码相同,区别在于它们是在后台运行的。因此,您必须问自己的问题是:如果我没有运行Handlers
,我可以使用Thread
吗?答案是是,您只需要在涉及的Activities
,Threads
等之间传递Handler对象。
现在,如果您需要有关选择内容的建议。请记住,AsyncTask
实际上是一个“改进的”线程,但与流行的信徒相反,它并不适用于长时间运行的进程。例如,如果你想让一个线程运行你的所有应用程序,那么这不是正确的选举。它适用于有目的的任务。
如果要运行长任务,请使用Service
。在开始时这有点令人困惑,但这是正确的选举。但要小心,Service
不是线程!但是,您可以在其中放置Threads并在它们在其他任何地方运行时对其进行处理。