您的位置:首页 > 其它

关于AsyncTask异步任务的见解

2016-01-17 17:48 225 查看
在Android中实现异步任务有两种方式: Handler 和 AsyncTask ;

这两种,有什么区别呢? Handler有什么优点或者缺点? AsyncTask有什么优点缺点呢?

可以这么说 :AsyncTask是Handler+Thread的良好封装,是一种较轻量级的异步类。它有一定的优势,同时也会有少许不足之处。

优点:1.操作简单,方便:因为是已经封装了的,提供一些良好的接口,所以操作起来更为简单。

2.过程可控:通过某些操作,可以使AsyncTask停止异步任务,所以便于控制。

缺点:1.不适用于多个异步任务。由于封装很好,在使用多个异步操作,同时需要对UI进行更新时,这个整个代码就会变得繁琐,复杂。

来说说 Handler

优点:1.结构清晰,功能明确。由于Handler是使用一个异步操作就写一个,所以一个Handler的功能很清晰。

2.适用于多个后台操作,它的优点正好弥补了AsyncTask的不足,在多个异步任务时,Handler的使用更为清晰,简单。

缺点:1.单个后台处理,代码量过多,冗余复杂。

下面来谈谈AsyncTask:

在继承AsyncTask这个类的时候会提供三个泛型参数: Params,Progress, Result

1.Params:启动任务时需要输入的参数 (可以是一个URL,也可以是一个Integer数据)

2.Progress:后台执行任务的进展情况(提供一个百分比)

3,.Result:后台返回结果的类型

步骤:

1.execute(Params...params) , 在代码中调用这个方法,实现异步任务的执行。

2.onPreExecute() , 在execute(Params...params)被调用之后执行,一般用来执行后台任务前对UI的标记

3.doInBackground(Params...params) , 在 onPreExecute() 完成后立刻执行,用于执行很费时的操作,这个方法将接收输入参数和返回结果。同时可以调用

publishProgress(Progress...values) 来更新信息。

4.onProgressUpdate(Progress...values) 在调用 publishProgress(Progress...values)时,此方法被执行,直接将信息更新至UI组件上。

5.onPostExecute(Result result) ,当后台结束之后,此方法被调用,计算结果作为参数传递到这个方法中,直接显示到UI组件上。

需要注意的:

1.异步任务必须在UI线程中创建,且一个任务实例只能调用一次,执行第二次会抛出异常

2. execute(Params...params)必须在UI线程中调用

3.不能手动调用 onPreExecute() ,doInBackground(Params...params) ,onProgressUpdate(Progress...values) ,onPreExecute(Result result) ,方法

4.不要在 doInBackground(Params...params) 方法中更新UI信息。

这几个函数的执行顺序图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: