ANDROID OKHTTP MVP
来源:互联网 发布:手机怎么注册淘宝网店 编辑:程序博客网 时间:2024/05/01 08:48
最近的项目中遇到了需要使用okhttp进行数据交互,同时需要使用mvp架构,在调研这个模块的时候补充了一些自己一知半解的知识,现将它记录下来。
1、同步、异步请求
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
异步请求涉及到多线程问题,android所有的请求必须是异步,主线程不支持网络请求,以使它不被阻塞。这样的话就涉及到了多线程以及稍微高级一些的线程池技术。
在之前的项目开发中发现:部分手机对于某个应用能够开启的最大数有限制(例华为荣耀6),并且线程开的越多就越有oom的风险。
2、okhttp的 get,post方法
get和post区别如下:
(1)get是从服务器上获取数据,post是向服务器传送数据。
(1) 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。
(2) 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
(2) GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
(3) 安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。
总结上面的主要几点:get是通过url来传送数据,post是将数据放入到header中:
get和post方式在okhttp中的应用:
get请求:
OkHttpClientManager ocm = OkHttpClientManager.getInstance();Thread thread = new Thread(new Runnable(){@Overridepublic void run() {Request request = new Request.Builder().url("http://121.43.156.50/api/v0/doctor/cc056df9-cf24-464f-bb5e-d2b715b610dc?accessToken=464e34e2-6957-4baf-978f-c908dc2d985b").build();Response response;//response = client.newCall(request).execute();client.newCall(request).enqueue(cb);Log.d("thread info request", Thread.currentThread().getName());}});excutorServiceManager.getExecutor().execute(thread);
处理返回的数据:
Callback cb = new Callback() { @Override public void onFailure(Request request, IOException e) { e.printStackTrace(); Log.e(TAG, "cannot get accesstoken"); } @Override public void onResponse(Response response) throws IOException { if (!response.isSuccessful()) { throw new IOException("Unexpected code " + response); } String rp = response.body().string(); Log.e(TAG, "response: "+rp); Log.d("thread info callback", Thread.currentThread().getName()); doctor = new Gson().fromJson(rp, DoctorBean.class); handler.post(new Runnable() { @Override public void run() { show(); } }); }};mDoctorModel.load(cb);
post请求类似,只是需要加上header就可以了。
3、线程、线程池
关于对okhttp线程的说明:
在项目中使用的是mvp和okhttp结合,在android中访问数据时通过异步请求,所以会创建一个thread,但是callback执行的时候也是一个异步请求。但是有不同的是request时的请求时自己创建的,callback是okhttpclientmanager自己创建并维护的。callback的进程个数数量可以不用考虑,但是自己创建的thread性能上有很大的问题。
对于上面的这种情况,引入了可以重用的线程池,
四种线程池中的:newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
代码如下:
package qingfengmy.mvp.utils;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ExecutorServiceManager {private static ExecutorServiceManager mInstance;private ExecutorService executor;private ExecutorServiceManager(){this.executor = Executors.newFixedThreadPool(6); }public static ExecutorServiceManager getInstance() { if (mInstance == null) { synchronized (ExecutorServiceManager.class) { if (mInstance == null) { mInstance = new ExecutorServiceManager(); } } } return mInstance; }public ExecutorService getExecutor() {return executor;}public void setExecutor(ExecutorService executor) {this.executor = executor;}}
然后在modelimpl去创建thread,然后把它加入到executorservice中。
代码
http://download.csdn.net/detail/mcdullsin/9214905
ps:okhttp需要jdk 1.7以上的版本.
- ANDROID OKHTTP MVP
- RxAndroid + OkHttp + MVP(Android Studio)
- mvp okhttp
- Kotlin Android Extensions+Android MVP项目(RxJava+Rerotfit+OkHttp+Glide)
- Android MVP架构(RxJava+SQLBrite+Retrofit+OkHttp+Glide)
- Android Mvp设计模式结合RxJava+OkHttp+retrofit浅谈
- Android当中的MVP模式(四)插曲-封装OkHttp
- Android实现xrecyclerview+MVP+okhttp一个小案例
- Android——MVP+xRecyclerView+Retrofit+OkHttp+RxJava结合应用
- android购物车二级列表实现+MVP+Okhttp
- android MVP + dagger2 + Retrofit + Rxjava+okhttp android基础项目框架搭建(2)--之MVP引入
- mvp+Recyclerview+okhttp+Springview
- mvp+okhttp+recyclerview
- mvp,okhttp,recyclerview
- okhttp+MVP+RecyclerView
- RecyclerView+MVP+OKhttp
- okHttp+Mvp+RecyclerView
- Mvp+RecyclerView+Okhttp
- 【Unity Shader】剖析Unity Surface Shader背后机制(二)
- 第八周项目1 - 建立顺序串的算法库
- 天冷加衣服咯
- 获取手机版本,手机型号,系统版本,手机设备唯一序列号,手机应用版本,手机网络类型的总结
- 第四周项目5——猴子选大王
- ANDROID OKHTTP MVP
- 056.Declare Global Variable 声明全局变量
- Android开发之旅:应用程序基础及组件(续)
- 安卓开发学习之006 LinearLayout.LayoutParams详解
- Zoho CRM系统助艾比森光电点亮客户统一管理之路
- sicily1000. 整数划分
- 获取元素的页面位置
- %p的用法
- 机器学习中的数学(2)-线性回归,偏差、方差权衡