Android应用程序开发与Web服务集成的良好实践是什么?

时间:2011-07-07 08:50:25

标签: android web-services

我开发了Android应用程序,并为应用程序提供了一个服务于REST风格JSON的Web服务器应用程序。

我的应用程序非常依赖于该Web服务,但随着流量的增加,用户的投诉开始,因为强制关闭问题。我不确定,但也许我的服务器(AWS小实例)可能无法正确或及时回答所有请求。

我计划在出现​​获取json响应的问题时重试Web请求,而不是提供错误/网络连接警报。

我想有很多开发人员将应用程序与Web服务集成在一起,那么处理网络问题的良好做法是什么?

或者这种网络问题的频率是否可以接受?

我每天大约需要10-20个问题。 对于专门用于服务器Tomcat的AWS小型实例(1.7 RAM),我每天有大约200,000多个Web请求。我分析日志没有线索,没有错误日志。此外,错误也在扩散。

2 个答案:

答案 0 :(得分:1)

您需要从分析问题开始,并确定问题的根本原因或根本原因。你总是需要考虑到

  • 网络连接可能会丢弃
  • 用户从3G / WiFi切换
  • Android设备"认为"它已经连接,而实际上并非

此外,在使用Android ConnectivityManager / NetworkInfo时要非常怀疑。只有在声明未连接时才信任它。如果已连接,请自行检查(有时,用户在热点上,并且他唯一的连接是登录页面。)

应用程序需要正确处理所有这些场景。它呈现给用户的方式取决于用例(你希望用户被告知错误,你是否默默地忽略它,只是重试,......)

在重试Web服务连接方面,有几种方法可以实现这一点:

  • 指数退避
  • 定期重新安排
  • 事件驱动的触发
  • 在暂停间隔后重试

您需要首先在客户端(Android)和服务器(AWS)上放置足够的日志记录,以便分析问题并得出正确的结论。

答案 1 :(得分:1)

我认为您的问题的答案在于您的Android应用程序的设计。

您需要考虑最糟糕的情况并重新设计您的应用程序以将其考虑在内并进行恢复。处理chaos monkey - 杰夫阿特伍德。

我个人从不允许Android应用程序处于需要强行关闭的状态。对于任何或所有网络连接,我假设连接已关闭,有损,并非所有数据都可以被检索并且(最终)启动并正常工作。

这样我的应用程序就会优雅地退化。如果它需要Web访问,它将在后台线程中尝试允许用户继续使用该应用程序,它将缓存先前的请求,并将重试,直到它获得连接或为最终用户提供良好的吐司。