后台服务中频繁请求失败/超时

时间:2017-03-15 17:36:27

标签: c# android android-asynctask android-service android-location

所以我有一个应用程序启动一个服务,该服务执行位置地理围栏的优点并将HTTP请求发送到服务器以供用户使用。当我的应用服务获得“已进入/退出的位置区域”事件时,它会触发HTTP请求。事情总体上运作良好。 但我遇到的问题是我在后台服务中发出的Http请求没有很高的成功率。当我在前台运行应用程序时,它往往会在95-100%的时间内成功。当应用程序被杀死且只有服务正在运行时,它往往会在大约80%的时间内成功。另外20%的时间它会超时或失败,几乎就像它没有互联网连接或其他东西。我有一个内置的重试系统,用于失败/超时的事件。我注意到,当它失败/超时时,它会在几分钟之后连续重试并失败/超时1-4次。这导致延迟的消息传递。

有没有人遇到过这个?这是正常的吗?或者我能做些什么来增加我的第一个请求成功的可能性,而不是等待多次重试?

所以位置测试运行可能是这样的:

  • 杀死应用程序(服务启动并运行正常)
  • 离开办公室,请求成功
  • 进入主页,请求成功
  • 离开家,请求成功
  • 输入库,请求超时,重试请求失败,重试请求成功。结果是“输入库”的消息迟了几分钟。
  • 退出库,请求成功
  • 进入办公室,请求成功

随着应用程序在前台运行,它的超时/失败可能性大大降低。

有一些格式问题复制/粘贴此代码,所以这里是一个screenie: enter image description here

                // Create a request
                var request = new HttpRequestMessage(this.Method, new Uri(url));
                request.Headers.Clear();
                this.Body = string.Empty;

                // Serialize request data for the body
                if (a_requestData != null)
                {
                    this.Body = JsonConvert.SerializeObject(a_requestData);
                    request.Content = new StringContent(this.Body, Encoding.UTF8, "application/json");
                }

                // Add headers
                request.Headers.Add(……..);

                // More code I left out to simplify

                // Using SendAsync
                result = httpClient.SendAsync(request, this.RestCancellationTokenSource.Token);

0 个答案:

没有答案