【问题标题】:What is the good practice on android app development integrated with web services?与Web服务集成的android应用程序开发的良好做法是什么?
【发布时间】:2011-07-07 17:13:02
【问题描述】:

我已经开发了 android 应用程序,并且有一个为应用程序提供 REST 样式 JSON 的 Web 服务器应用程序。

我的应用程序强烈依赖该网络服务,但随着流量的增加,用户开始抱怨,因为强制关闭问题。我不确定,但也许我的服务器(AWS 小型实例)可能无法正确或及时响应所有请求。

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

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

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

我每天大约做 10-20 个问题。 我每天有大约 200.000 多个 Web 请求,用于 AWS 小型实例(1.7 RAM),专用于服务器 Tomcat。我分析日志没有任何线索,没有错误日志。错误也会传播。

【问题讨论】:

  • 我认为这个线程可能是一个 wiki 帖子。

标签: android web-services


【解决方案1】:

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

  • 网络连接可能断开
  • 用户从 3G/WiFi 切换
  • Android 设备“认为”它已连接,但实际上并没有

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

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

在重试 web 服务连接方面,有几种方法可以实现:

  • 指数退避
  • 定期重新调度
  • 事件驱动触发
  • 暂停间隔后重试

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

【讨论】:

    【解决方案2】:

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

    您需要考虑最坏的情况并重新设计您的应用程序以将其考虑在内并恢复。处理chaos monkey - jeff atwood。

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

    这样我的应用程序就会优雅地退化。如果它需要网络访问,它会在后台线程中尝试允许用户继续使用应用程序,它会缓存以前的请求并重试,直到它获得连接或向最终用户敬酒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 2012-09-30
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 2011-11-04
      相关资源
      最近更新 更多