在Androidy应用开发中,整个架构的性能好坏很大一部分都体现在线程的操作中,所以这是Android开发中是一块很重要的内容,对于线程,多线程这一部分的基础内容,我们可以参考本博客前期中Java多线程的内容:JavaSE第九十七讲:线程与进程 在这一讲中我们主要学习Android中关于AsyncTask的学习以及相关Demo的实现。
一. 使用 AsyncTask 目的
官网位置:Android ---> API Guides ---> Processes and Threads ---> Using AsyncTask
异步任务允许你在用户接口上执行异步工作。它会在自己的工作线程上执行可能阻塞的操作然后将结果推送到UI主线程,而不会让你自己去处理线程的操作。(在Android3.0以上的版本中,为了使得Android UI能够更加流畅,它不允许用户在UI的主线程中访问网络,所以会强制用户开辟一个子线程,在这个线程中完成下载耗时的操作(比如从网络中下载一张图片),此时UI的主线程与下载的子线程是存在一个异步的过程,一旦子线程中下载图片完成,就要把结果推送到UI上.)
使用方法:继承AsyncTask类,实现 doInBackground() 回调接口,这样就运行在后台的线程池中,如果你想更新你的UI,你可以实现onPostExecute()放,它可以讲doInBackground()方法中的结果运行在 UI主线程中,所以你可以安全的更新你的UI.你可以在UI主线程中通过execute()方法来执行你的异步任务。
如下代码片段:
二. AsyncTask 介绍
AsyncTask其实就是一个线程操作的框架,它也是android围绕这 Thread 和 Handler来设计的。它可以直接的被一些短时间的操作使用(通常是几秒),如果你想要保持线程运行很长时间,强烈建议你使用java.util.concurrent包下的Executor, ThreadPoolExecutor 和 FutureTask 这些类来实现.
一个异步任务是在跑在后台线程中进行计算然后把结果推送到UI主线程中的。它是由三个泛型类型和四个回调方法来实现的。
1 三个泛型类型
1)Params: 启动任务执行的输入参数,比如HTTP请求的URL。
2) Progress: 后台任务执行的百分比会发布到UI主线程中。
3) Result: 后台执行任务最终返回的结果,比如String,Integer等【注意】如果三个泛型都没有类型,我们就用void代替,如下所所示(注意类型是Void是大写的)
private class MyTask extends AsyncTask<Void, Void, Void> {}
2 四个回调方法
1)