我有一个 Android 应用程序,作为其核心功能的一部分,它可以进行 ASP.NET WebService 调用。我已经使用 ksoap2 成功地编写了应用程序来进行调用,它可以满足我的需要。
我们的客户报告说,他们发现一些手机无法使用该应用程序。即,在某些 WebService 调用期间,它似乎超时。这让我很困惑,因为它在我们在我办公室测试过的几部手机上都能完美运行。
客户报告的其中一部手机是 Sprint 上的三星 Galaxy S2(他们报告的另一部手机是三星 Galaxy S 或三星 Galaxy S3 - 换句话说,真正类似的手机)。幸运的是,我找到了该公司的一名员工,他在 Sprint 上拥有三星 Galaxy S2,并愿意让我借用它。我能够重新创建问题。附加到 Eclipse,它似乎得到了 SocketTimeoutException。不是每次,但往往不是。
作为测试的一部分,我将手机连接到 Verizon 上的 MiFi。所以,基本上我是把它从 Sprint 的网络上取下来,放到 Verizon 的网络上。当我这样做时,应用程序按预期工作,没有超时。
起初我以为 Sprint 的网络可能很糟糕,但从我的客户在该国另一端的情况来看,这似乎不太可能,所以除非他们的网络一直很糟糕,否则我怀疑情况是否如此。
但我注意到的是——在手机的状态栏中,当连接到 Sprint 时,我看到了 3G 和 4G 图标,它们似乎在来回切换(它们的布局方式,它们都出现了,只是转动彼此相邻的关闭/开启)。当我连接到 MiFi 时,就手机知道或关心的情况而言,我已连接到 Wi-Fi 点。
所以我想知道的是 - 手机会不会在 3G 和 4G 网络之间来回“切换”,并且对 web 服务调用的响应丢失了?在 iPhone 上,如果您使用 3G 网络上的手机(例如)在 Safari 中请求网页,然后手机找到要连接的 Wi-Fi 点并切换,您仍然可以在设备上获得网页连接到 Wi-Fi 后。我认为操作系统允许 3G 呼叫在关闭该网络之前完成。
三星对 Galaxy S* 系列的操作系统所做的某些事情是否会导致我的响应丢失?如果是这样,我能做些什么来防止这种情况发生吗?有没有办法找出哪些网络连接仍然存在?
更新:请参阅下面的答案,这个问题的前提不是原因,尽管我确实忘记指出失败或超时的特定调用包含 base64 编码的图像,因此它们大于正常的网络服务调用。