在android中处理线程时,我遇到了runnable和handler。我的问题是,使用AsyncTask
or Thread
(or Runnable
) 进行多线程的更好选择是什么。我发现使用AsyncTask
非常简单有效。
4 回答
异步任务
AsyncTask 旨在提供一种方便、易于使用的方式来实现 Android 应用程序的后台处理,而无需过多担心低级细节(线程、消息循环等)。它提供了回调方法,有助于安排任务并在需要时轻松更新 UI。
AsyncTask 在单独的线程中运行一组操作,可以在其工作期间显示进度并在任务完成时显示通知。
但是,可以使用 AsyncTasks 调度的作业数量是有限制的。
可运行
- Runnable 是可以执行的命令。您应该在单独的线程中运行。此外,您应该在这种情况下开发一个逻辑,如何更新进度以及如何在任务完成时通知。
处理程序
Handler 更透明,可能给你更多的自由;所以如果你想对事情有更多的控制,你会选择 Handler。
Handler 是一个特殊的类,可以处理发送到处理程序线程的消息。
就我而言,如果您需要运行短操作,您可以使用 AsyncTask。为了保持线程长时间运行,强烈建议您使用 java.util.concurrent 包提供的各种 API,例如Executor,ThreadPoolExecutor和FutureTask。也可以参考http://developer.android.com/reference/android/os/AsyncTask.html
AsyncTask 的优点是它可以使用 doInBackground 函数在与 UI 线程不同的线程中执行操作,然后使用 onPostExecute 函数将处理的输出返回给 UI 线程。这非常重要,因为只有 UI 线程可以用于 UI 相关功能。
Asynctask 更高效,因为它具有函数 onPreExecute()、onPostExecute()、onProgressUpdate() 和 doInBackground() 函数。doInBackground() 函数在单独的线程中运行,我们可以在其中运行密集操作,您可以使用 onProgressUpdate() 更新正在运行的操作的进度。并且在 doInBackground() 函数完成后调用 onPostExecute() 函数,如果使用,您可以关闭进度对话框。这里的优点是您不需要创建单独的线程,因为此类具有执行此操作的功能。