2

在android中处理线程时,我遇到了runnable和handler。我的问题是,使用AsyncTaskor Thread(or Runnable) 进行多线程的更好选择是什么。我发现使用AsyncTask非常简单有效。

4

4 回答 4

2

异步任务

  • AsyncTask 旨在提供一种方便、易于使用的方式来实现 Android 应用程序的后台处理,而无需过多担心低级细节(线程、消息循环等)。它提供了回调方法,有助于安排任务并在需要时轻松更新 UI。

  • AsyncTask 在单独的线程中运行一组操作,可以在其工作期间显示进度并在任务完成时显示通知。

  • 但是,可以使用 AsyncTasks 调度的作业数量是有限制的。

可运行

  • Runnable 是可以执行的命令。您应该在单独的线程中运行。此外,您应该在这种情况下开发一个逻辑,如何更新进度以及如何在任务完成时通知。

处理程序

  • Handler 更透明,可能给你更多的自由;所以如果你想对事情有更多的控制,你会选择 Handler。

  • Handler 是一个特殊的类,可以处理发送到处理程序线程的消息。

于 2012-11-26T13:34:20.907 回答
2

就我而言,如果您需要运行短操作,您可以使用 AsyncTask。为了保持线程长时间运行,强烈建议您使用 java.util.concurrent 包提供的各种 API,例如ExecutorThreadPoolExecutorFutureTask。也可以参考http://developer.android.com/reference/android/os/AsyncTask.html

于 2012-11-26T13:37:34.010 回答
0

AsyncTask 的优点是它可以使用 doInBackground 函数在与 UI 线程不同的线程中执行操作,然后使用 onPostExecute 函数将处理的输出返回给 UI 线程。这非常重要,因为只有 UI 线程可以用于 UI 相关功能。

于 2012-11-26T13:23:56.897 回答
0

Asynctask 更高效,因为它具有函数 onPreExecute()、onPostExecute()、onProgressUpdate() 和 doInBackground() 函数。doInBackground() 函数在单独的线程中运行,我们可以在其中运行密集操作,您可以使用 onProgressUpdate() 更新正在运行的操作的进度。并且在 doInBackground() 函数完成后调用 onPostExecute() 函数,如果使用,您可以关闭进度对话框。这里的优点是您不需要创建单独的线程,因为此类具有执行此操作的功能。

于 2012-11-26T13:37:06.063 回答