网络底层框架设计
AsyncTask
public void init2() {
//对于网络请求,我们一般定义为GET和POST即可,GET为请求数据,POST为修改数据
/*Request:
* GET: http://www.xxx.com/aaa.api?key1=value1&key2=value2
* 以键值对的形式进行存放,之所以这样设计,是为了更方便地定义数据缓存
* POST:我们将key-value这样的兼职对存放在Form表单中进行提交
* */
/*Response
* 一般都是以JSON数据进行返回
* */
new AsyncTaskDemo().execute();//调用此方法既可以执行异步操作
}
/*
* 泛型分别是:传入参数,网络请求的进度,网络请求返回的结果
* */
public class AsyncTaskDemo extends AsyncTask<String,Integer,Boolean>{
@Override
//显示进度对话框等
protected void onPreExecute() {
}
//网络请求操作
@Override
protected Boolean doInBackground(String... url) {
publishProgress();//用来调用onProgressUpdate()
return null;
}
//更新进度条
@Override
protected void onProgressUpdate(Integer... values) {
}
//返回执行结果
@Override
protected void onPostExecute(Boolean aBoolean) {
}
}
使用AsyncTask有一个致命缺点,那就是不能灵活控制其内部的线程池
线程池里面的每个方法存放的都是MobileAPI调用方法,而AsyncTask中又没有暴露出取消这些请求的方法,也就是我们去洗的CancelRequest方法
使用原生的ThreadPoolExecutor+Runnable+Handler+okhttp
//给出的代码都是只言片语,无法敲个demo出来,不看了