AsyncTask

AsyncTask 异步任务

在Android中对于一些耗时的操作,一般都不会放在UI线程中运行,会新建一个子线程去做。 Android默认UI线程阻塞超过20秒则会引发ANR异常。但是如果开启太多的子线程,这就会给系统带来巨大的负担,随之也会带来性能方面的问题。在这种情况下我们就可以考虑使用类AsyncTask来异步执行任务,不需要子线程和handler,就可以完成异步操作和刷新UI。

AsyncTask是一个抽象类,通常用于被继承,继承AsyncTask时需指定以下三个泛型参数:

  1. Params:启动任务执行的输入参数类型,对应的是调用自定义的AsyncTask的类中调用excute()方法中传递的参数。如果不需要传递参数,则直接设为Void即可。
  2. Pregress:后台任务完成的进度值的类型;
  3. Result:后台执行任务完成后返回结果的类型;和doInBackground()方法的返回值类型保持一致。

实现AsyncTask方法:

  1. doInBackground(Params…): 后台线程将要完成的任务,返回值类型和Result保持一致,若无就Void
  2. onProgressUpdate(Progress… progress):无返回值类型。参数:若无就传递Void;若有,就可用Progress
  3. publishProgress(Params… params):在执行此方法的时候会直接调用onProgressUpdate()
  4. onPostExecute(Result result) :无返回值类型。参数:和Result保持一致。
  5. onPreExecute():无返回值类型。不传参数

对于AsyncTask有以下几个规则:
1. Task的实例必须在UI thread中创建
2. execute方法必须在UI thread中调用
3. 该task只能被执行一次,否则多次调用时将会出现异常
4. 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(), onProgressUpdate(Progress…)这几个方法,而是由Android系统负责调用;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值