场景:

iOS中我们可能经常用到监听网络,不过大部分是监听网络的类型,即2G/3G/4G WIFI,是否连接网络,然而测试人员对APP进行测试时候经常会有一个弱网测试,即在弱网环境下对APP进行测试,这个时候APP会出现各种问题,比如接口请求不到数据等问题,那么我们有没有办法像监听网络一样去监听弱网呢?

弱网测试:我们的经常用的抓包工具Charles就可以简易的模拟弱网环境,而我们的真机也可以在调试时候模拟弱网

设置-->开发者-->Status-->Enable打开,然后选择下面的每个选项,就可以模拟弱网了

思考1:

网上查了资料并没有直接监听弱网的资料,那么有什么其他办法可以做到这一点呢?

这个时候我想到了终端的ping命令,对一个baidu.com的ping结果如下:

那么能不能在iPhone上去ping我们的服务器,通过ping的结果去判断我们的网络环境呢?不多说,尝试一下。

Apple提供了一个系统的ping库,有兴趣的可以去看

https://developer.apple.com/library/content/samplecode/SimplePing/Listings/Common_SimplePing_m.html#//apple_ref/doc/uid/DTS10000716-Common_SimplePing_m-DontLinkElementID_4

我偷懒网上找了一个封装好的三方库STSimplePing,加入工程后进行测试结果如下:

正常网络情况下:

将弱网模拟调至100% lose结果如下:

结果都能收集到,若通过Ping判断网络方案合理的话,那么我们可以通过时间和丢包率来判断网络情况

思考2:

参考文档:http://www.cocoachina.com/ios/20160224/15407.html

分析了ReallyReachaAbility监控的原理,ReachaAbility监控网络状态的变化,ping判断网络是否真实连接及状态,通过定时器时时判断网络状态及真实的网络连接情况

iOS如何监听弱网?的更多相关文章

  1. 阿里云服务器 - node启动服务的时候只有监听内网IP才可以供外网访问

    阿里云服务器 - node启动服务的时候只有监听内网IP才可以供外网访问

  2. iOS 实时监听app的网络连接状态

    实际iOS开发中,在网络通信中我们大部分使用第三方(只谈短链),譬如 AFNetworking.ASIHttpRequest(这个停更了,想必现在没多少人用),swift的 Alamofire 等. ...

  3. iOS,监听tableVIew的偏移量

    1. 添加监听 [self.tableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObs ...

  4. ios 定位 监听是否跨入某个指定的区域

    /*****监听用户是否进入和走出 在某个区域*****/ 1 #import "ViewController.h" #import <CoreLocation/CoreLo ...

  5. iOS 网络监听、判断

    一 网络监听 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary ...

  6. iOS 关于监听手机截图,UIView生成UIImage, UIImage裁剪与压缩的总结

    一.  关于监听手机截图 1. 背景: 发现商品的售价页总是被人转发截图,为了方便用户添加截图分享的小功能 首先要注册用户截屏操作的通知 - (void)viewDidLoad { [super vi ...

  7. ios --键盘监听JYKeyBoardListener

    没有前言,就是一个简单的键盘监听,自动调整输入框的位置不被键盘遮挡 .h // // JYKeyBoardListener.h // // Created by JianF.Sun on 17/9/2 ...

  8. iOS自学-监听按钮点击、提醒框

    //事件监听的问题 CGRect btn2Frame = CGRectMake(100.0, 150.0, 60.0, 44.0); //两种不同的方式创建 UIButton *btn2 = [UIB ...

  9. iOS键盘监听事件

    1.注册键盘通知事件 NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; // 键盘将出现事件监听 [center ...

随机推荐

  1. Java计算上下基线

    public class GetAverageandStandardDevition { static List<Long> list = new ArrayList<Long> ...

  2. js判断浏览器

    function myBrowser(){ var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 ; if (isOpera) { ret ...

  3. Repeater控件使用中的一些小问题

    网页上用来展示列表的数据,发现还是Repeater比GridView,DetailView之类的要灵活些,所以近期用到了就总结下遇到的一些情况,保留下来以备之后查阅,不用现问度娘了... 自己摸索的, ...

  4. 使用的 SQL Server 版本不支持数据类型“datetime2”.

    错误原因,在使用ado.net entity的时候,entity使用的数据库是sqlserver 2008, 但后来实际使用中使用的数据库是sqlserver 2005, 使用的 SQL Server ...

  5. 查看APK方法数的工具dex-method-counts

    做APK方法总能遇到方法数超限的问题(主要是方法数, 字段数, String数.等各种数都可能超过65k导致不能安装) 除了大公司都自己做了一些检查方法. 网上还有一些开源的查询工具. 给大家推荐一个 ...

  6. C++设计模式-Memento备忘录模式

    Memento模式作用:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态. UML图: Originator:负责创建一个备忘录Me ...

  7. C++11引用临时变量的终极解析

    工作中遇到一个引用临时变量的问题,经过两天的学习,私以为:不仅弄明白了这个问题,还有些自己的独到见解. 这里使用一个简单的例子来把自己的学习过程和理解献给大家,如果有什么问题请不吝指正.   **** ...

  8. Junit4断言

    Junit4断言API: http://junit.org/javadoc/latest/index.html Constructor Summary protected Assert()       ...

  9. Javascript中的Promise

    Promise定义 Promise是CommonJs的规范之一,包含resolve,reject,done,fail,then等方法,能够帮助我们控制代码的流程,避免函数的多层嵌套.异步在web开发中 ...

  10. nginx相关的一些记录

    http redirect to https: if ($http_cf_visitor ~ '"scheme":"http"'){ rewrite ^/(.* ...