一、AsyncTask简单介绍
官方文档中对AsyncTask的解释是:AsyncTask更加适用于UI线程。这个类允许执行后台操作并在UI界面上发布结果,而不必处理多线程。AsyncTask是围绕Thread和Handler设计的一个辅助类,它不构成一个通用的线程框架。Asynctasks应该用于短作业(最多几秒钟)。
说的简单一点,AsyncTask其实就是Android提供的一个轻量级异步类。使用的时候可以自己自定义一个类去继承AsyncTask,就能在自定义类中实现异步操作,并且该类的实现方法中提供了接口来反馈当前异步任务执行的程度,最后还可以将执行的结果传递给UI线程。
二、接口回调简单介绍
接口回调,字面意思可以理解为定义一个接口,等以后出现了某一种状况的时候,然后去调用接口的方法做一些事。 多个比方说,我是搞开发的,目前手里没有项目,我就打电话奥巴马问他手里有没有项目给我做,要是他手里有项目就直接给我了,要是没有他会说后面可能有,你留下电话,有了我就打电话告诉你,这就是一个简单的回调理解,奥巴马后面打电话给我就相当于一个回调过程,而我打电话给奥巴马就相当于注册接口。 在Demo中,接口回调使用在异步任务执行完毕之后。因为你备份完短信可能要谈个吐司,播个音乐什么的,那就必须让MainActivity知道你已经执行完任务了,但是MainActivity怎么知道你已经执行完了,这里就需要接口回调了,让MainActivity实现接口,并且先定义好当完成任务需要做什么事情。这样当任务执行完就会直接调用MainActivity中定义好的方法更新UI等操作。短信备份操作回调结构图如下:
三、AsyncTask和接口回调的使用案例
先来看一下使用AsyncTask显示备份短信和还原短信的进度条。实现的原理很简单,写一个短信的工具类,在类中提供从 数据库 读取短信到集合和还原保存的短信到集合的方。我们自定义两个类继承AsyncTask,一个类实现将集合中的短信保存到本地的逻辑,另一个类实现将将集合中的短信插入到数据库中的逻辑。并且当异步任务执行完毕之后,我们使用接口回调,让主线程去处理短信备份和还原完成的工作,这里是谈吐司,当然你也可以播放音乐什么的。
四、AsyncTask使用详解
官方文档中称:异步任务将耗时操作放在后台线程上计算运行,然后将其结果在用户界面线程上发布。一个异步任务是由参数,过程和结果这3个泛型类型定义。它还包括四个步骤:oPostExecute,doInBackground,onProgressUpdate和onPostexecute。使用AsyncTask必须定义一个类继承AsyncTask,然后子类中必须实现doInBackground方法,经常也会实现oPostExecute方法。自定义类继承AsyncTask代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<code>
private
class
DownloadFilesTask
extends
AsyncTask<url,
long
=
""
> {
protected
Long doInBackground(URL... urls) {
int
count = urls.length;
long
totalSize =
0
;
for
(
int
i =
0
; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((
int
) ((i / (
float
) count) *
100
));
// Escape early if cancel() is called
if
(isCancelled())
break
;
}
return
totalSize;
}
protected
void
onProgressUpdate(Integer... progress) {
setProgressPercent(progress[
0
]);
}
protected
void
onPostExecute(Long result) {
showDialog(
"Downloaded "
+ result +
" bytes"
);
}
}
</url,></code>
|
开启异步任务代码如下:
1
2
|
<code><code>
new
DownloadFilesTask().execute(url1, url2, url3);
</code></code>
|
1
2
|
<code><code><code>
private
class
MyTask
extends
|