0

有几种方法可以在您的应用程序中异步获取数据。一个是a Handler,另一个是a AsyncTask。现在我已经使用了两者,并且想知道哪一个在某些任务中表现更好/更有效。

到目前为止,我主要用于AsyncTasks获取 Web 数据,以及Handler从 获取数据ServicesActivities.

我想知道将Handler's 用于 Webdata 或使用 AsyncTasks 从Services. 最大的区别是什么?

4

2 回答 2

4

由于AsyncTask使用 aHandler,您的比较是......奇怪。

AsyncTask非常适合事务性工作:需要多于几毫秒且少于几分钟的工作。对于这类工作,如果您不需要自己的线程管理,AsyncTask通常使用起来更简单。

如果您的线程需要一些特殊的特性,AsyncTask并且不容易处理,或者如果您需要线程的时间不确定(例如,直到用户按下停止按钮),请使用您自己的线程和其他东西来让主应用程序线程工作: a Handler, or post(), or runOnUiThread()。“不确定的时间段”建议假设您使用的是内置线程池之一——我从不喜欢从您未设置的线程池中绑定线程。

于 2012-08-04T23:55:13.920 回答
1

看起来像AsyncTask使用它自己的内部处理程序。我的测试是使用处理程序的“帖子”立即入队。在onCreate此使用时可能会出现问题,因为必须在之后将其他操作排入队列onCreate(尚未通读 Android Activity 等源代码)。因此,尝试发布以稍后加载布局不起作用。不得不使用一个AsyncTask. 由于AsyncTask有自己的内部Handler;也许,然后创建任务可能会直接发生在队列中,onCreatedoInBackgroundandonPostExecute可能会稍后发生,因为它们稍后会出现在队列中。

所以,AsyncTask这个 UI 工作得更好,需要稍后加载一个过大的布局文件setContentView- 稍后意味着可以显示onCreate之后。在完成之前不会出现。ProgressDialogProgressDialogonCreate

此外,请参阅本文了解如何选择何时使用 AsyncTask。基本上是在想要更新 UI 时说。但实际上你可以这样做,runOnUIThread所以不需要处理程序,也不AsyncTask需要你已经知道 Java 线程。runOnUIThread就像 Swing 中的 invoke/invokeLater 一样。

于 2012-10-25T14:29:21.673 回答