【发布时间】: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(); -
保持活跃的网络连接是一个非常高的电池成本,一种方法是像你一样打败操作系统的电池优化,另一种方法是做前台服务,.. .. 理想情况下,您需要在进入后台模式时断开/关闭套接字并启动推送通知以使应用程序保持最新(或使用新工作计划功能)并在进入前台后,再次建立您的实时网络套接字。