我是Android开发的新手。目前我正在开发一个应用程序,它将从用户那里获取查询,将查询发送到服务器并将收到XML响应作为回报。然后它将使用XMLparser处理xML响应,将从XML响应中提取答案并向用户显示答案。由于所有这些处理都需要一些时间,因此我想向用户显示一个进度对话框,以了解所需的处理时间。
我已经通过一些方法来完成这项工作,就像我可以使用AsyncTask,Handler或Runnable(java)线程一样。但是,尽管我已经阅读了所有这些内容,但我很困惑使用哪一个。 请告诉我哪一个更适合用于上述场景。并且是实现首选方法的简单方法。
提前谢谢你。
答案 0 :(得分:2)
我建议您使用AsyncTask,因为它比其他方法更简单,并且它适合您的需求。
我认为你把这三个不同的实体搞得一团糟:
AsyncTask在一个单独的线程中运行一组操作,可以在其工作期间显示进度,并在任务完成时显示通知。
Runnable是一个可以执行的命令。你应该在一个单独的线程中运行。此外,您应该在这种情况下开发一个逻辑,如何更新进度以及在任务完成时如何通知。
Handler是一个特殊的类,可以处理发送给处理程序线程的消息。
答案 1 :(得分:2)
来自http://developer.android.com/reference/android/os/AsyncTask.html:
此类允许在UI线程上执行后台操作和发布结果,而无需操作线程和/或处理程序。
AsyncTask旨在用于与您非常相似的用途。
Runnable只是在另一个线程上运行一段代码:
表示可以执行的命令。通常用于在不同的Thread中运行代码。 (http://developer.android.com/reference/java/lang/Runnable.html)
Handler更多地用于消息队列。您的案例似乎不需要重复发送邮件。
Handler有两个主要用途:(1)安排消息和runnables作为将来的某个点执行; (2)将要在不同于自己的线程上执行的操作排入队列。 http://developer.android.com/reference/android/os/Handler.html
请注意,Runnable和Handler都没有谈论在UI线程上显示结果。这就是AsyncTask比其中任何一个都更有帮助的地方。
答案 2 :(得分:1)
这可能是我个人的偏好 - 但我会在你的情况下使用AsyncTask
。它提供了启动任务,必要时更新进度等所有必要的控件。我的应用程序中有一个非常相似的要求(向服务器发送请求,在XML中获取响应,解析响应,对数据执行某些操作) - 我为此目的使用AsyncTasks。
答案 3 :(得分:0)
据我所知,AsyncTask是推荐的方式。我认为这是最简单的实现方式,也是异步任务的“Android最佳实践”。
你能参考这个question
吗?答案 4 :(得分:0)
以下是我的看法。
Handler
更多用于排队许多操作,并提供更多控制。对于通常不限于UI的重复性任务,它会更好。
AsyncTask
提供了一种简单的方法来进行后台处理,而不是关心较低级别的内容。这对于相对较小的个人UI更新非常有用。
IMO,您应该使用AsyncTask
。话虽如此,这是一种折腾。
答案 5 :(得分:0)
我认为这是一个自我偏好的问题,但在你的情况下我会选择AsyncTask
,因为它促进了UI线程和后台线程之间的交互。
答案 6 :(得分:0)
我会使用AsyncTask
和Handler
的组合,因为请记住您无法从UI线程外部更改UI(在这种情况下,您无法干预并向用户显示答案) )。
为了解决这个问题,我运行了AsyncTask并使用自定义回调方法捕获结果,该方法只是将其封装在Message
中并将其发送到我的自定义Handler
,该自定义{{1}}位于UI线程内部并且可以安全地在屏幕上呈现我的结果。
答案 7 :(得分:0)
AsyncTask可能是选择,因为它提供了启动异步任务,更新进度条等所需的所有控件。
但是,重点是AsyncTask是该场景的最佳解决方案。 Handler或Runnable更适合双工案例,如聊天应用程序。