在UI中,为了执行一些后台工作,我使用了单独的Thread
。但正如其他人所建议的,我现在正在使用AsyncTask
。
Thread
和之间的主要区别是AsyncTask
什么?
在哪种情况下,我应该使用a Thread
还是AsyncTask
?
在UI中,为了执行一些后台工作,我使用了单独的Thread
。但正如其他人所建议的,我现在正在使用AsyncTask
。
Thread
和之间的主要区别是AsyncTask
什么?
在哪种情况下,我应该使用a Thread
还是AsyncTask
?
Answers:
对于长时间运行或占用大量CPU的任务,基本上有两种方法可以执行此操作:Java线程和Android的本地AsyncTask。
两者都不一定比另一个更好,但是知道何时使用每个呼叫对于利用系统性能以使您受益至关重要。
使用AsyncTask用于:
将Java线程用于:
互联网上有很多好的资源可以帮助您:
http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html
AsyncTask
与自己的调度程序一起使用。
如果使用Java线程,则必须在自己的代码中处理以下要求:
如果将结果回发到用户界面,则与主线程同步
取消线程没有默认设置
没有默认的线程池
没有默认值来处理Android中的配置更改
线
异步任务
线
线程是并发执行单元。它有自己的调用堆栈。有两种方法可以在应用程序中实现线程。
一种是提供一个扩展Thread并覆盖其run()方法的新类。另一个是在创建新线程实例时为其提供一个Runnable对象。线程可以通过调用其“ start”方法来执行。您可以通过调用线程的“ setPriority(int)”方法来设置线程的“优先级”。
如果您对UI部分没有影响,则可以使用线程。例如,您正在调用某些Web服务或下载一些数据,并且在下载后,将其显示在屏幕上。然后,您需要使用带有线程的处理程序,这将使您的应用程序变得复杂,无法处理来自线程的所有响应。
处理程序使您可以发送和处理与线程的MessageQueue关联的Message和Runnable对象。每个线程都有每个消息队列。(类似于待办事项列表),线程将获取每条消息并对其进行处理,直到消息队列为空。因此,当处理程序进行通信时,它只会向调用方线程提供一条消息,并且它将等待处理。
如果使用Java线程,则需要在自己的代码中满足以下要求:
如果将结果回传到用户界面,则与主线程同步没有取消线程的默认值没有默认线程池的默认值处理Android中配置更改的默认值
异步任务
通过AsyncTask,可以正确,轻松地使用UI线程。此类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。异步任务由在后台线程上运行的计算定义,并且其结果发布在UI线程上。
AsyncTask将经历以下四个阶段:
onPreExecute()
在执行任务之前在UI线程上调用
doInbackground(Params ..)
onPreExecute()完成执行后立即在后台线程上调用。
onProgressUpdate(Progress ..)
调用publishProgress(Progress ...)后在UI线程上调用。
onPostExecute(结果)
后台计算完成后在UI线程上调用。
为什么要使用AsyncTask?
易于使用的UI线程。(因此,在调用者线程是UI线程时使用它)。
无需操纵处理程序。
欲了解更多信息,请点击这里
线:
Thread
应该将长时间运行的操作与主线程分开,以提高性能。但是它不能被优雅地取消,并且不能处理Android的配置更改。您无法从更新UI Thread
。
AsyncTask
可用于处理持续时间少于5毫秒的工作项目。使用AsyncTask
,您可以更新与java不同的UI Thread
。但是,许多长时间运行的任务会降低性能。
您没有更多选择可替代它们。
HandlerThread / 处理程序和ThreadPoolExecutor
请参阅以下帖子以获取更多详细信息: