02_AsyncTask泛型含义

AsyncTask的泛型含义

 

 

泛型含义

 

private class MyAsyncTask extends AsyncTask<Void, Void, Void> {}

我们刚刚说了有三个泛型的

Void,Void,Void

我们对小写的void很熟悉,就是空类型.

 

我们的数据类型不是都有大写的类型吗,比如intInteger,charCharacter,byteByte,

所以空类型也有大写的形式,就是Void

 

 

 

 

现在我们来看看三个参数是干嘛用的

 

我们把第一个Void改成String试一试

我们发现报错了,而且DoInBackground方法的参数也报错了,

那么我们把这里的参数也改成String...params

 

所以其实第一个泛型就是DoInBackground的参数类型.

也是execute()方法的参数类型

 

 

我们在DoInBackground怎么获取到第一个参数呢

params[0]

 

 

 

 

接下来第二个泛型

我们改成Integer

我们发现没有地方报错,

我们在DoInBackground方法内来一个

publishProgress(参数);

这里的参数就是Integer

 

我们在类中来一个onProgressUpdate方法

这个方法是当调用了publishProgress方法的时候执行的方法

注意:publishProgress方法是在DoInBackground方法中的,所以是在子线程中的,

onProgressUpdate是在主线程中的.

 

所以我们来举刚刚的例子

刚刚的ProgressDialog的进度可以通过这两个方法来控制

子线程中

for(int i;i<5;i++):

publishProgress(i);

 

onProgressUpdate(Integer... values):

mPd.setProgress(values[0])

 

这样就是子线程来控制进度,主线程中的onProgressUpdate来控制界面的更新

其实跟DoInBackgroundonPostExecute很像对吧

 

所以第二个泛型就是控制了onProgressUpdatepublishProgress两个方法的参数.

 

 

 

 

 

第三个泛型

我们改成String试一试,发现DoInBackground方法的返回类型报错了

那么第三个参数就是控制DoInBackground方法的返回类型.

我们可以return 一个String

 

还有我们onPostExecute方法的参数就是DoInBackground返回的值

所以也改成字符串 String result

 

 

 

 

我们总结一下

第一个泛型就是DoInBackground方法的参数,也是new MyAsyncTask.execute(参数)这里的参数

第二个泛型就是onProgressUpdatepublishProgress方法的参数

第三个泛型是DoInBackground方法的返回值类型,也是onPostExecute方法的参数

 

 

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值