🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
***** **课后练习** [TOC=6] # 1. 知识点整理 什么是AsyncTask AsyncTask的优点 AsyncTask泛型参数的作用 AsyncTask使用方式 AsyncTask常用方法及其作用(哪些是必要,哪些是不必要) # 2. 技能练习 通过AsyncTask进行网络异步请求。 # 3. 总结 ~~~ 1. 网络的异步任务、AsyncTask、CallBack 2. 网络的异步任务并更新UI实现方式: 本质来讲,基本上都是通过Thread + Handler来实现 a. Thread + 自定义Handler方式:使用最广泛,也是最灵活,自定义性最强。 Thread:负责执行耗时操作和通知UI更新(sendXXXMessageXXX发消息) Handler:更新UI(Handler的对象必须是创建在UI线程) b. Thread + Handler的post方法:使用比较简单,Handler的对象也要创建在UI线程 post方法的参数是一个Runnable对象,在其run方法中实现更新的操作 c. Thread + Activity的runOnUiThread方法:使用也很简单 runOnUiThread参数也是一个Runnable对象,在其run方法中实现更新操作 d. Thread + BroadcastReceiver方式: 在Thread里执行耗时操作,然后发广播 在BroadcastReceiver中,收到广播,然后更新UI。在onReceive方法中不能执行太多的操作 e. AsyncTask方式:简单易用。 在doInBackGround里执行耗时操作 f. 其他方式:网络上的一些开源框架,比如xUtils、afinal、volley。。。。 3. AsyncTask:基本使用,三个泛型参数<Path, Progress, Result> Path: 指定异步任务资源(通常是一个网络地址字符串或者URL) 可变长度的参数, 传入的位置是在execute(Path)方法中 接收的位置doInBackGround(Path)方法 Progress:可变长度的参数,表示进度值 传入的位置在publishProgress(Progress) 接收的位置在onUpdateProgress(Progress) Result: 异步任务执行的结果 指定doInBackGround的返回值类型 指定onPostExecute的参数类型 几个方法的意义: onPreExecute:在执行耗时操作之前调用,在其中需要执行一些初始化的工作 比如,初始化进度条对话框或者给一些变量赋初始值 doInBackGround:执行在子线程当中,主要在其中执行一些耗时操作。比如, 网络任务上传下载、访问数据库或者ContentProvider、复杂的运算等 如果需要实时的更新进度,需要在其中不断的调用publishProgress来 通知onUpdateProgress更新进度。 onUpdateProgress:收到publishProgress的通知之后,进行进度更新 onPostExecute:主要接收doInBackGround的返回值,耗时操作的执行结果 可以在该方法中更新UI的显示 使用的方式: a. 创建异步任务类的对象MyAsyncTask的对象task b. 调用execute方法来启动异步任务task.execute(Path); 调用的基本顺序: onPreExecute --> onDoInBackGround --> (onUpdateProgress) --> onPostExecute 4. CallBack回调接口的使用: 关键就是搞清楚回调方法:定义的位置、实现的位置、调用的位置 定义的位置:该内部接口中 实现的位置:在使用的地方,需要得到该接口对象的地方 调用的位置:内部接口所在的类当中 使用CallBack的好处:把接口方法的定义和调用给封装起来,让工具类的使用变得简单易用。 用户不需要关心接口方法的定义以及调用,只需要关注方法的具体实现功能即可。 ~~~