iOS 使用AFNetWorking监听APP网络状态变化(可用于更改缓存策略、提示网络等)
前言
我们知道在APP开发过程中。监听手机当前的网络状态还是一个非经常常使用的方法,这里我来为大家接受一种使用AFNetWorking来监听当前的网络状态的方法;网络监听对程序开发的帮助有非常多:比方下载时在不同的网络状态下使用不同下载策略、缓存策略、或者就是一个单纯的提示
使用控件
在这里我使用的是AFNetWorking 3.0之前的版本号。我并没有測试过最新的3.0.4版本号能否够正常使用,可是我觉得是不影响的,假设各位在測试过程中,有什么问题的话请直接私信我。
代码实现
首先我们新建一个继承与NSObject的类。编写一个单例。
NetworkingTools.h
#import <Foundation/Foundation.h>
#import "AFNetworking.h"
@interface NetworkingTools : NSObject
+ (AFHTTPRequestOperationManager *)sharedManager;
@end
NetworkingTools.m
#import "NetworkingTools.h"
#import "AFNetworking.h"
@implementation NetworkingTools
+ (AFHTTPRequestOperationManager *)sharedManager {
static AFHTTPRequestOperationManager * manager = nil;
if (!manager) {
manager = [AFHTTPRequestOperationManager manager];
}
return manager;
}
@end
能够看到这基本上就是一个非常easy的单例。相信大家都不存在什么问题。
接下来会给大家看一个方法,也就是监听网络状态的方法。那么这里我推荐能够将这种方法在APPDelegate.m里面进行监听。
- (void)listenNetWorkingPort{
[[NSURLCache sharedURLCache] setMemoryCapacity:5 * 1024 * 1024];
[[NSURLCache sharedURLCache] setDiskCapacity:50 * 1024 * 1024];
AFHTTPRequestOperationManager * manager = [NetworkingTools sharedManager];
// 设置网络状态变化回调
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusNotReachable:
// 设置网络请求的缓存政策
manager.requestSerializer.cachePolicy = NSURLRequestReturnCacheDataDontLoad;
NSLog(@"断网状态");
// [UIAlertView showConfigPrompt:NSLocalizedString(@"当前没有网络,请检查你的网络设置", nil)];
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
// 设置网络请求的缓存政策
manager.requestSerializer.cachePolicy = NSURLRequestReturnCacheDataElseLoad;
NSLog(@"4G状态");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
// 设置网络请求的缓存政策
manager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
NSLog(@"WiFi状态");
break;
default:
break;
}
}];
// 启动网络状态监听
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
}
后记
眼下为大家带来的都是些比較简单的小技巧和工具,希望和大家共同交流和进步。也非常想写一遍比較充实的干货。可是眼下水平和各方面的限制,就先这样了。
iOS 使用AFNetWorking监听APP网络状态变化(可用于更改缓存策略、提示网络等)的更多相关文章
- IOS-利用AFNetworking监听网络状态
网络环境检测:检测用户当前所处的网络状态 效果图 1.当蜂窝和wifi同时关闭时候 显示为不可达(AFNetworkReachabilityStatusNotReachable)状态 2.打开蜂窝移 ...
- Android 监听APP进入后台或切换到前台方案对比
在我们开发的过程中,经常会遇到需要我们判断app进入后台,或者切换到前台的情况.比如我们想判断app切换到前台时,显示一个解锁界面,要求用户输入解锁密码才能继续进行操作:我们想判断app切换到后台,记 ...
- iOS 实时监听app的网络连接状态
实际iOS开发中,在网络通信中我们大部分使用第三方(只谈短链),譬如 AFNetworking.ASIHttpRequest(这个停更了,想必现在没多少人用),swift的 Alamofire 等. ...
- ios 监听app从后台恢复到前台
正常情况下,在AppDelegate中实现下面两个方法,能够监听从后台恢复到前台 [cpp] - (void)applicationDidEnterBackground:(UIApplication ...
- 后台自动运行,定期记录定位数据(Hbuilder监听 app由前台切换到后台、切换运行环境的 监听方法)
http://ask.dcloud.net.cn/question/28090 https://blog.csdn.net/qq_37508970/article/details/86649703 各 ...
- iOS: 使用KVO监听控制器中数组的变化
一.介绍: KVO是一种能动态监听到属性值的改变的方式,使用场景非常广泛,这里我只讲如何监听控制器ViewController中数组的变化. 二.了解: 首先我们应该知道KVO是不能直接监听控制器Vi ...
- ios应用来电监听
先导入这两个头文件,库文件不用导可以 #import <CoreTelephony/CTCallCenter.h> #import <CoreTelephony/CTCall.h&g ...
- 监听APP升级广播处理
当旧版本的用户升级新版本的时候需要重新设定一些值处理,这时候需要监听升级版本的广播 <receiver android:name=".OnUpgradeReceiver"&g ...
- 类似吸顶功能解决ios不能实时监听onscroll的触发问题
问题:近期项目需要一个类似西东功能,当页面向上滚动160px后div固定在顶部 解决方法:首先,想到的是window.onscroll方法 .fixed{position:fixed;-webkit- ...
随机推荐
- c#实现Form窗体始终在桌面最前端显示
方法一 //调用API [System.Runtime.InteropServices.DllImport("user32", CharSet = System.Runtime.I ...
- win上使用nvm管理node版本
win上使用nvm管理node版本 若想让nvm管理机器上所有的node版本,首先需要卸载电脑上已有的node(很重要), 然后下载nvm在win上的安装包 windows-nvm的下载地址 下载 下 ...
- java装饰设计模式
将一个对象作为参数进行传递,然后对这个对象进行包装---改变其中的方法或者添加一些新的行为---装饰设计模式---装饰者模式---Decorate Model 改变一个方法: 1. 通过继承这个类,然 ...
- 并查集+背包 【CF741B】 Arpa's weak amphitheater and Mehrdad's valuable Hoses
Descirption 有n个人,每个人都有颜值bi与体重wi.剧场的容量为W.有m条关系,xi与yi表示xi和yi是好朋友,在一个小组. 每个小组要么全部参加舞会,要么参加人数不能超过1人. 问保证 ...
- 洛谷——P1591 阶乘数码
P1591 阶乘数码 题目描述 求n!中某个数码出现的次数. 输入输出格式 输入格式: 第一行为t(≤10),表示数据组数.接下来t行,每行一个正整数n(≤1000)和数码a. 输出格式: 对于每组数 ...
- 洛谷——P1163 银行贷款
P1163 银行贷款 题目描述 当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款.这个问题要求计算出贷款者向银行支付的利率.假设利率按月累计. 输入输出格式 输入格式: 输入文 ...
- Milk Pails(BFS)
Milk Pails 时间限制: 1 Sec 内存限制: 64 MB提交: 16 解决: 4[提交][状态][讨论版] 题目描述 Farmer John has received an order ...
- vector,list.queue,array.....
vector 这个我们最熟悉了,也可能是我们用的最多的容器之一了. 我们可以用vector来模拟栈,vector的push_back和pop_back效率很高,时间复杂度是常数. 由于他是一个连续的内 ...
- 11、Flask实战第11天:蓝图
蓝图的基本使用 之前我们写的代码都是集中在一个主程序文件里面.这样不利于分层解耦和维护.蓝图的作用就是让我们的flask项目更加模块化结构更加清晰,可以将相同模块的视图函数放在同一个蓝图下,同一个文件 ...
- 23、Django实战第23天:视频播放页面
打开素材course-play.html,会发现播放页面处了包含播放器,其他和“章节”页面一样. 1.把course-play.html复制到template目录下 2.把下面两段代码拷贝出来 < ...