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的好处:把接口方法的定义和调用给封装起来,让工具类的使用变得简单易用。
用户不需要关心接口方法的定义以及调用,只需要关注方法的具体实现功能即可。