*****
**课后练习**
[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的好处:把接口方法的定义和调用给封装起来,让工具类的使用变得简单易用。
用户不需要关心接口方法的定义以及调用,只需要关注方法的具体实现功能即可。
~~~
- 咨询项目实战
- 第一单元 HTTP协议
- 1.1 OSI七层模型
- 1.2 HTTP协议(重点)
- 1.3 HTTPS协议(了解)
- 1.4 TCP/IP协议扩展
- 1.5 WebService简介及实战(无接口)
- 1.6 课后练习
- 第二单元 HTTPURLConnection
- 2.1 ANR
- 2.2 网络判断
- 2.3 HTTPURLConnection
- 2.4 课后练习
- 第三单元 AsyncTask
- 3.1 AsyncTask概述
- 3.2 AsyncTask基本使用
- 3.3 课后练习
- 第四单元 图片异步加载
- 4.1 图片异步加载概述
- 4.2 LruCache
- 4.3 DiskLRUCache
- 4.4 图片三级缓存概述
- 4.5 封装图片加载缓存框架
- 第五单元 ListView多条目
- 5.1 ListView多条目概述
- 5.2 ListView多条目的使用
- 第六单元 ListView实现下拉刷新上拉加载
- 6.1 下拉刷新和上拉加载更多
- 6.2 XListView概述
- 6.3 XListView的使用
- 第七单元 封装网络框
- 7.1 封装网络框架概述
- 7.2 网络框架的封装
- 第八单元 项目介绍
- 8.1 公司项目团队架构简介
- 8.2 项目文档及项目流程介绍
- 8.3 项目管理
- 8.4 项目开发
- 第九单元 项目框架搭建
- 9.1 基类封装概述
- 9.2 Application中初始化配置
- 9.3 项目中的工具类
- 9.4 封装网络请求框架
- 9.5 封装图片异步缓存框架
- 第十单元 搭建UI框架1
- 10.1 侧滑菜单概述
- 10.2 主界面框架搭建
- 第十一单元 搭建UI框架2
- 11.1 TabLayout的概述
- 11.2 TabLayout的使用
- 第十二单元 图片上传
- 12.1 图片上传概述
- 12.2 图片上传的实现
- 第十三单元 PullToRefresh
- 13.1 PullToRefresh概述
- 13.2 PullToRefresh的使用
- 13.3 缓存业务实现思路
- 第十四单元 事件分发及滑动冲突
- 14.1 事件分发概述
- 14.2 事件分发流程
- 14.3 事件分发的使用
- 第十五单元 传感器的基本使用
- 15.1 传感器概述
- 15.2 传感器的使用
- 第十六单元 HTML与CSS复习
- 16.1 HTML
- 16.2 CSS
- 第十七单元 js复习
- 17.1 js基础语法
- 17.2 js数组和内置对象
- 17.3 js常用事件
- 17.4 js对象模型
- 17.5 js 正则表达式
- 第十八单元 WebView
- 18.1 WebView 概述
- 18.2 WebView的使用
- 18.3 WebView与js交互
- 第十九单元 项目案例
- 项目概述
- 第二十单元 项目答辩
- 周考
- 第一周周考
- 第二周周考
- 第三种周考
- 月考
- 接口文档