AnsyncTask类是Android的一个轻量级的用于处理异步任务的类,一般用法是继承AsyncTask类,然后在类中实现异步操作,再将异步执行的进度反映在主线程的UI组件上,也可以直接new一个新的AsyncTask的对象,重写里面的对应方法。关于AsyncTask异步任务的讲解网上很详细,这里自己也总结一下。
相关概念
多线程概念
- 线程(Thread):程序执行流的最小单元,是程序中一个单一的顺序控制流程,每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
- 多线程(multithreading):并行地执行多条指令,将CPU的时间片按照调度算法,分配给各个线程,实际上是分时执行的,因为切换时间很短,让人感觉是同时实行!
同步与异步
- 同步:比如当我们做某件事情时,在没完成之前就不能做其他事情,简单说就是必须等前一件事做完才能做下一件事。对于程序而言,上一条语句没执行完就不能执行下一条语句。
- 异步:当我们执行某个功能后,我们并不需要立即得到结果,我们额可以正常地做其他操作,这个功能可以在完成后通知或者回调来告诉我们
AsyncTask解析
使用AsyncTask的必要性
- 由于Android是不允许一般线程中更新UI组件,另外Android4.0后禁止在UI线程中执行网络操作。这时候就需要异步操作,通常我们在Handler里写好UI更新,然后通过sendMessage()等的方法通知UI更新,但是Handler相较于AsyncTask是重量级的,AsyncTask轻量级异步类我们通过几十行的代码就可以完成 我们的异步操作,而且进度可控,实际异步用的最多的地方就是网络操作,图片加载,数据传输等
AsyncTask的结构
AsyncTask子类的参数
1 | AsyncTask<Params, Progress, Result> |
AsyncTask相关方法与流程
1 | AsyncTask<Void, String, Void> test = new AsyncTask<Void, String, Void>(){ |
使用注意
1.AsyncTask的实例以及execute()方法必须在UI线程中创建
2.不要手动调用AsyncTask的实例里面重写的方法
3.AsyncTask的实例只能被执行一次,多次调用会出现异常