Ram*_*Ram 129 multithreading android android-asynctask
在UI中,为了执行一些后台工作,我使用了一个单独的Thread
.但正如其他人所说,我现在正在使用AsyncTask
.
a Thread
和an 之间的主要区别是AsyncTask
什么?
在哪种情况下,我应该使用a Thread
还是AsyncTask
?
Moh*_*hit 139
对于长时间运行或CPU密集型任务,基本上有两种方法可以执行此操作:Java线程和Android的本机AsyncTask.
两者都不一定比另一个好,但知道何时使用每个呼叫对于利用系统的性能对您有利是至关重要的.
使用AsyncTask:
使用Java线程:
互联网上有很多好的资源可以帮助你:
http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html http://www.mergeconflict.net/2012/05/java-threads-vs-android-asynctask-which.html
Tar*_*ney 44
如果使用Java线程,则必须在自己的代码中处理以下要求:
如果将结果发布到用户界面,则与主线程同步
取消线程没有默认值
没有默认的线程池
在Android中处理配置更改没有默认值
Uma*_*ari 28
线
的AsyncTask
Vip*_*hit 11
线
线程是并发执行单元.它有自己的调用堆栈.在应用程序中实现线程有两种方法.
一个是提供一个新类,它扩展Thread并覆盖其run()方法.另一个是在创建过程中提供一个带有Runnable对象的新Thread实例.可以通过调用其"start"方法来执行线程.您可以通过调用其"setPriority(int)"方法来设置线程的"优先级".
如果您在UI部分中没有任何影响,则可以使用线程.例如,您正在调用某些Web服务或下载某些数据,并在下载后将其显示在屏幕上.然后你需要使用带有线程的处理程序,这将使你的应用程序变得复杂,以处理来自线程的所有响应.
Handler允许您发送和处理与线程的MessageQueue关联的Message和Runnable对象.每个线程都有每个消息队列.(与待办事项列表一样),线程将接收每条消息并处理它,直到消息队列为空.因此,当Handler进行通信时,它只是向调用者线程发出一条消息,它将等待处理.
如果您使用Java线程,则需要在自己的代码中处理以下要求:
如果将结果发回到用户界面,则与主线程同步无取消线程的默认值无默认线程池在Android中处理配置更改时没有默认值
的AsyncTask
AsyncTask可以正确,方便地使用UI线程.此类允许在UI线程上执行后台操作和发布结果,而无需操纵线程和/或处理程序.异步任务由在后台线程上运行的计算定义,其结果在UI线程上发布.
AsyncTask将经历以下4个阶段:
onPreExecute()
在执行任务之前在UI线程上调用
doInbackground(PARAMS ..)
onPreExecute()完成执行后立即在后台线程上调用.
onProgressUpdate(进步..)
调用publishProgress(Progress ...)后在UI线程上调用.
onPostExecute(结果)
在后台计算完成后在UI线程上调用.
你为什么要使用AsyncTask?
易于用于UI线程.(因此,当调用者线程是UI线程时使用它).
无需操纵处理程序.
有关详细信息,请访问此处
线:
Thread
应该用于将长时间运行的操作与主线程分开,以提高性能。但是不能优雅的取消,不能处理Android的配置变化。您无法从Thread
.
AsyncTask
可用于处理持续时间短于 5ms 的工作项。使用AsyncTask
,您可以更新与 java 不同的 UI Thread
。但是许多长时间运行的任务会扼杀性能。
你有更多的选择来代替它们。
HandlerThread / Handler和ThreadPoolExecutor
有关更多详细信息,请参阅以下帖子:
归档时间: |
|
查看次数: |
90377 次 |
最近记录: |