【问题标题】:Android Nougat limits network connection when app in foreground当应用程序在前台时,Android Nougat 会限制网络连接
【发布时间】:2018-07-27 01:39:48
【问题描述】:

我正在开发带有后台服务的 Android 应用。服务在自己的进程中运行(如com.example.app:extProccess)。创建 WebSockets 连接的服务。但是在服务启动后不到 1 分钟,WebSockets 断开连接,但服务仍然存在(不是被 Android 杀死)。 20-30 分钟后,连接正在恢复。

似乎设备进入了打盹,但很快。 这仅在某些 Nougat 设备上观察到。

如果我阻止此应用服务的电池优化 (android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) 和 websocket 正常工作而不会断开连接。

我的问题是,如果我的应用在前台,为什么 Android 会如此迅速地限制网络?那么在这种情况下如何在不使用android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS的情况下为后台服务保持网络呢?

【问题讨论】:

  • 您可以在 Read/write/... 调用周围尝试 WakeLock,这(部分)对我有帮助
  • 我在OnCreate 中有此代码在我的服务中:PowerManager mgr = (PowerManager)this.GetSystemService(Context.PowerService); wakeLock = mgr.NewWakeLock(WakeLockFlags.Partial | WakeLockFlags.AcquireCausesWakeup, "MyWakeLock"); wakeLock.Acquire();
  • 保持活跃的网络连接是一个非常高的电池成本,一种方法是像你一样打败操作系统的电池优化,另一种方法是做前台服务,.. .. 理想情况下,您需要在进入后台模式时断开/关闭套接字并启动推送通知以使应用程序保持最新(或使用新工作计划功能)并在进入前台后,再次建立您的实时网络套接字。

标签: android xamarin websocket


【解决方案1】:

从 Android API 21(Lollipop)开始,Google 开始更加关注电池优化。问题来了是任何服务。解决此问题的一种方法是将作业调度程序用于您的后台任务(可用文档here)。此外,任何大量使用 Android 资源的任务都会被 Android 框架终止。针对您的特定用例的唯一解决方案是优化您的代码或使用您所做的“忽略电池优化”。

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多