大佬教程收集整理的这篇文章主要介绍了AsyncTask官方文档教程整理,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
简介
Android给我们提供了一种轻量级的异步任务类AsyncTask。该类中实现异步操作,并提供接口反馈当前异步执行结果及进度,这些接口中有直接运行在主线程中的(如 onPostExecute,onPreExecute等)。
AsyncTask可以轻松正确的使用UI线程,这个类允许你在后台操作,并且不需要使用threads或者handler将结果发布到UI线程。
AsyncTask设计之初就是辅助Thread和Handler的,并且不会生成线程。AsyncTask应该被用于短时间内的操作(最多几秒钟),如果你想要长时间保持线程运行,请使用Executor或者ThreadPoolExecutor或者FutureTask。
AsyncTask在后台运行任务,在UI线程发布结果,定义三个参数,Params,Progress和Result,执行四个步骤,onPreExecute,doInBACkground,onProgressupdate和onPostExecute。
使用方法
AsyncTask必须被继承来使用。子类必须实现至少一个方法(ddoInBACkg@R_772_7060@Params…))
,还有一个最常用的方法(onPostExecute(Result)
。
private class DownloadFilesTask extends AsyncTask<URL,Integer,Long> { protected Long doInBACkg@R_772_7060@URl... urls) { int count = urls.length; long @R_47_10586@lSize = 0; for (int i = 0; i < count; i++) { @R_47_10586@lSize += Downloader.downloadFile(urls[i]); publishProgress((int) ((i / (float) count) * 100)); // Escape early if cancel() is called if (isCancelled()) break; } return @R_47_10586@lSize; } protected void onProgressupdate(Integer... progress) { setProgressPercent(progress[0]); } protected void onPostExecute(Long result) { showDialog("Downloaded " + result + " bytes"); } }@H_450_28@
启动异步任务:
AsyncTasks的范型参数
异步任务使用的参数是:
这三个参数不一定非要指定,可以使用Void来传入空值。
4个步骤
onPreExecute()
,在应用程序执行前在UI线程上@L_696_10@。这步通常被用来准备任务开始,例如显示一个进度条。doInBACkg@R_772_7060@Params…)
,在onPreExecute()
方法被@L_696_10@后立即执行此方法,用来执行长时间的任务。publishProgress(Progress...)
来发布进度,这些值时在UI线程中发布的,在onProgressupdate(Progress...)
接收。onProgressupdate(Progress…)
,在publishProgress(Progress...)
方法@L_696_10@后在UI线程@L_696_10@此方法。执行时间未定义。该方法用于在后台计算仍在执行时,用户界面中显示的进度。例如,它可以用于对进度条进行动画处理或在文本字段中显示日志。onPostExecute(Result)
,在后台计算完成后在UI线程上@L_696_10@。 后台计算的结果作为参数传递给该步骤。取消异步任务
任何时候都可以通过@L_696_10@cancel(Boolean)
方法来取消任务。
@L_696_10@此方法将导致对isCancelled()
的后续调用返回true。
@L_696_10@此方法后,onCancelled(Object)
,而不@L_696_10@onPostExecute(Object)
为了尽可能快地取消任务,应该始终从doInBACkground(Object [])
中定期检查isCancelled()
的返回值(如果可能的话)。
线程规则
execute(Params …)
onPreExecute()
,onPostExecute(Result)
,doInBACkground(Params …)
,onProgressupdate(Progress …)
。内存监控
AsyncTask保证所有回调@L_696_10@都是同步的,使得以下操作在没有显式同步的情况下是安全的。
onPreExecute()
中设置成员字段,并在doInBACkground(Params …)
中引用它们。doInBACkground(Params …)
中设置成员字段,并在onProgressupdate(Progress …)
和onPostExecute(Result)
中引用它们。执行顺序
首次引入时,AsyncTasks在单个后台线程上串行执行。
从DONUT开始,这被更改为一个允许多个任务并行操作的线程池。
从HONEYCOMB开始,任务在单个线程上执行,以避免并行执行引起的常见应用程序错误。
如果真的需要并行执行,则可以使用THREAD_POOL_EXECUTOR@L_696_10@executeOnExecutor(java.util.concurrent.Executor,Object [])
。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。
以上是大佬教程为你收集整理的AsyncTask官方文档教程整理全部内容,希望文章能够帮你解决AsyncTask官方文档教程整理所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。