了解AsyncTask异步任务

了解AsyncTask异步任务,我们首先得了解一个概念UI线程

android的ui线程操作并不是安全的,并且和用户直接进行界面交互的操作都必须在ui线程中进行才可以。

Android默认约定当UI线程阻塞超过20秒将会引发ANR(Application Not Responding)异常。

为了避免UI线程失去响应的问题,Android建议将耗时操作放在新线程中完成,但新线程也可能动态更新UI组件.

AsyncTask<>是一个抽象类,通常用于被继承,继承AsyncTask时需要指定如下三个泛型参数。

AsyncTask<Params,Progress,Result>是抽象类,它定义了如下三种泛型类型。

Params:启动任务执行的输入参数的类型。

Progress:后台任务完成的进度值得类型。

Result:后台执行任务完成后返回结果的类型。

使用AsyncTask只要如下三步即可。

1)创建AsyncTask的子类,并为三个泛型参数指定类型。

如果某个泛型参数不需要指定类型,可将它指定为Void.

2)根据需要,实现AsyncTask的如下方法。

doInBackground(Params...):重写该方法就是后台线程将要完成的任务。该方法可以调用publishProgress(Progress...Values)方法更新任务的执行进度。

onProgressUpdate(Progress...values):在doInBackgroud()方法中调用publicProgress()方法更新任务的执行度后,将会触发该方法。

onPreExecute():该方法将执行后天耗时操作前被调用。通常该方法用于完成一些初始化的准备工作,比如在界面上显示进度条等。

onPostExecute(Result result):当doInBackground()完成后,系统会自动调用OnPostExecute()方法,并将doInBackground()方法的返回值传给该方法。

3)调用AsyncTask子类的实例的execute(Params...Params)开始执行耗时任务

使用AsyncTask时必须遵守如下规则。

1)必须在UI线程中创建AsyncTask的实例

2)必须在UI线程中调用AsyncTask的execute()方法。

3)AsyncTask的OnPreExecute(),onPostExecute(Result result),doInBackground(Params...params),onProgressUpdate(Progress...values)方法,不应该由程序员代码调用,而是由AsyncTask只能被执行一次,多次调用将会引发异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值