AsyncTask的泛型含义
泛型含义
private class MyAsyncTask extends AsyncTask<Void, Void, Void> {}
我们刚刚说了有三个泛型的
Void,Void,Void
我们对小写的void很熟悉,就是空类型.
我们的数据类型不是都有大写的类型吗,比如int是Integer,char是Character,byte是Byte,
所以空类型也有大写的形式,就是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来控制界面的更新
其实跟DoInBackground和onPostExecute很像对吧
所以第二个泛型就是控制了onProgressUpdate和publishProgress两个方法的参数.
第三个泛型
我们改成String试一试,发现DoInBackground方法的返回类型报错了
那么第三个参数就是控制DoInBackground方法的返回类型.
我们可以return 一个String
还有我们onPostExecute方法的参数就是DoInBackground返回的值
所以也改成字符串 String result
我们总结一下
第一个泛型就是DoInBackground方法的参数,也是new MyAsyncTask.execute(参数)这里的参数
第二个泛型就是onProgressUpdate和publishProgress方法的参数
第三个泛型是DoInBackground方法的返回值类型,也是onPostExecute方法的参数