Retrofit2.0+ RxJava 优雅的取消重复避免并取消请求(十一)
2017-01-16 16:18
645 查看
Tamic/文
地址:http://blog.csdn.net/sk719887916/article/details/54575137
前几篇主要介绍了retrofit基本使用,结合rxJava的案列,以及RxJava结合retrofit的封装,包括公用参数,局部参数请求头添加,缓存,https, 文件上下传,结果解析,异常处理等,还有一些技巧,那么还有一个比较关键的是取消问题。
两者结合技巧可点击阅读;http://blog.csdn.net/sk719887916/article/details/52132106
Retrofit2.0+ RxJava 优雅的取消重复避免并取消请求
避免重复:
如果需要在非UI线程的情况,可以直接指定线程为IO线程。
地址:http://blog.csdn.net/sk719887916/article/details/54575137
好了 目前很多情况是使用两者来做网络框架的,那么在两者结合情况我们是如何使用取消某个请求呢,或者避免重复请求,今天就稍微给大家介绍一下本人的处理方式
加入rxApi管理池
取消
一般我们在在activity的
也可以在onPause()中取消;
好了两句代码就能优雅的取消请求了,赶快试试吧!
Tamic/文
地址:http://blog.csdn.net/sk719887916/article/details/54575137
随意打赏:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/20/95ce0036a9448d9e43732b997c30da96)
欢迎关注我微信公众号!
地址:http://blog.csdn.net/sk719887916/article/details/54575137
前几篇主要介绍了retrofit基本使用,结合rxJava的案列,以及RxJava结合retrofit的封装,包括公用参数,局部参数请求头添加,缓存,https, 文件上下传,结果解析,异常处理等,还有一些技巧,那么还有一个比较关键的是取消问题。
两者结合技巧可点击阅读;http://blog.csdn.net/sk719887916/article/details/52132106
Retrofit2.0+ RxJava 优雅的取消重复避免并取消请求
Retrofit取消请求
构建API
Call<LoginResult> call = apiService.getData("Tamic", "1234"); call.enqueue(new Callback<LoginResult>() { @Override public void onResponse(Call<LoginResult> call, Response<LoginResult> response) { } @Override public void onFailure(Call<LoginResult> call, Throwable t) { } }); }
取消请求
直接用call实例进行cancel即可call.cancel();
Rxjava取消订阅
遇到取消取消订阅的情况可以直接:subscription.unsubscribe();
避免重复:
if (!subscription.isUnsubscribed()) {
subscription.unsubscribe();}
如果需要在非UI线程的情况,可以直接指定线程为IO线程。
observable.unsubscribeOn(Schedulers.io());
Retrofit2.0+ RxJava 取消请求
两者结合技巧可点击阅读;http://blog.csdn.net/sk719887916/article/details/52132106地址:http://blog.csdn.net/sk719887916/article/details/54575137
好了 目前很多情况是使用两者来做网络框架的,那么在两者结合情况我们是如何使用取消某个请求呢,或者避免重复请求,今天就稍微给大家介绍一下本人的处理方式
构建一个接口
主要管理rxJava的Subscription描述。这个东东可以理解为对一些事件所给的总Tag一样,你去办理身份证给的回执单一样,有了回执单你就可以追踪办理身份证的这个事情。/** * Created by Tamic on 2017-01-16. */ public interface RxActionManager<T> { void add(T tag, Subscription subscription); void remove(T tag); void cancel(T tag); void cancelAll(); }
具体impl的RxApiManager
主要处理真实的取消请求作用,维护rxjava的订阅池。/** * Created by Tamic on 2017-01-16. */ public class RxApiManager implements RxActionManager<Object> { private static RxApiManager sInstance = null; private ArrayMap<Object, Subscription> maps; public static RxApiManager get() { if (sInstance == null) { synchronized (RxApiManager.class) { if (sInstance == null) { sInstance = new RxApiManager(); } } } return sInstance; } @TargetApi(Build.VERSION_CODES.KITKAT) private RxApiManager() { maps = new ArrayMap<>(); } @TargetApi(Build.VERSION_CODES.KITKAT) @Override public void add(Object tag, Subscription subscription) { maps.put(tag, subscription); } @TargetApi(Build.VERSION_CODES.KITKAT) @Override public void remove(Object tag) { if (!maps.isEmpty()) { maps.remove(tag); } } @TargetApi(Build.VERSION_CODES.KITKAT) public void removeAll() { if (!maps.isEmpty()) { maps.clear(); } } @TargetApi(Build.VERSION_CODES.KITKAT) @Override public void cancel(Object tag) { if (maps.isEmpty()) { return; } if (maps.get(tag) == null) { return; } if (!maps.get(tag).isUnsubscribed()) { maps.get(tag).unsubscribed(); maps.remove(tag); } } @TargetApi(Build.VERSION_CODES.KITKAT) @Override public void cancelAll() { if (maps.isEmpty()) { return; } Set<Object> keys = maps.keySet(); for (Object apiKey : keys) { cancel(apiKey); } } }
使用姿势
具体请求的subscriptionSubscription subscription = Retrofit返回的subscription实例
加入rxApi管理池
RxApiManager.get().add("my", subscription);
取消
RxApiManager.get().cancel("my");
一般我们在在activity的
onDestroy(), Fragment的
onDestroyView()中调用
也可以在onPause()中取消;
@Override protected void onPause() { super.onPause(); RxApiManager.get().cancel("my"); }
好了两句代码就能优雅的取消请求了,赶快试试吧!
Tamic/文
地址:http://blog.csdn.net/sk719887916/article/details/54575137
案列下载:
github:https://github.com/Tamicer/Novate随意打赏:
欢迎关注我微信公众号!
相关文章推荐
- Retrofit2.0+ RxJava 优雅的取消重复避免并取消请求(十一)
- Retrofit2.0+RxJava+RxAndroid——强强联合的网络请求框架
- Android Retrofit2.0配合RxJava2.0请求网络
- Retrofit2.0+RxJava+RxAndroid——强强联合的网络请求框架
- Android:RxJava 结合 Retrofit 优雅实现 网络请求轮询
- Android 优雅的让RxJava2.0+Retrofit2.0结合使用
- Rxjava+Retrofit取消网络请求
- Android:RxJava 结合 Retrofit 优雅实现 网络请求轮询
- Android基于Retrofit2.0和RXJava2.0 的HTTPS网络请求搭建
- Retrofit 2.0 + RxJava 2.0搭建简单的Android请求框架。
- android MVP+Retrofit2.0与RxJava网络请求数据,listview展示
- Android:RxJava 结合 Retrofit 优雅实现 网络请求轮询
- Retrofit2.0+RxJava+RxAndroid——强强联合的网络请求框架
- Retrofit2.0+RxJava+RxAndroid——强强联合的网络请求框架
- Android Retrofit2.0-post&get请求&文件上传&结合Rxjava
- 【Android 进阶】Retrofit2 目前最优雅的网络请求框架
- retrofit+RxJava+okhttp简便封装实现网络请求(详解)
- Retrofit,Rxjava网络请求是 baseUrl 报错 IllegalArgumentException
- 从零开始搭建一个主流项目框架(三)—RxJava2.0+Retrofit2.0+OkHttp
- 使用Retrofit+RxJava搭建简单的MVP网络请求框架