虽然handler提供了某些多线程方法 但是acynctask 提供了更多的相关方法 比如处理进度条 或者其他多线程相关问题的类 可以更好的处理多线程 而且这个地方不太好理解 涉及泛型(c++里面叫模板)和多个参数传参 等等 要好好记录下 部分内容参考下面链接
AsyncTask定义了三种泛型类型 Params,Progress和Result。
- Params 启动任务执行的输入参数,比如HTTP请求的URL。
- Progress 后台任务执行的百分比。
- Result 后台执行任务最终返回的结果,比如String。
大概的意思就是
注意1 这里使用了泛型 需要传入具体的类模板 就是要传入三个变量的数据类型 没有的话传void(不是null null不是数据类型)
这个地方很难一两句话说明白 以后不懂了再去看java的泛型吧
注意2这里String... params 是java一种特殊写法 表示不缺定的参数个数的字符串 其实就是可以传入多个参数的可以不用形成数组的一种简便写法
相当与
官网上写的使用这个类的四个步骤
大概意思如下(就不翻译英语了 鸟语太差)
1.onPreExecute()
, 在执行线程之前的初始化工作(看名字pro 。。之前)2doInBackground(Params...)
3.onProgressUpdate(Progress...)
4onPostExecute(Result)
补充下:这四个函数 其中doinbackgroud不可以更新ui 其他几个可以更新ui
最后就是执行 new MyAsyncTask().execute("","","");//随便几个参数都行 反正他也打包成参数数组传入 大概这样 其他用的时候查api就好