java - 当设备未连接到充电器时,NetD 会销毁 socket

标签 java android

我有一个非常烦人的问题,我不明白发生了什么:

我们正在编写一个库,它通过蓝牙建立一个套接字。之后,我们在本地主机上注册一个服务器。现在有几个应用程序正在建立与本地主机的连接并发送/接收数据。服务器正在 bundle 连接并通过蓝牙处理通信。

我们从Android 7.0开始遇到这个问题; NetD 经常破坏我们到本地主机的套接字。我们可以在 Logcat 中看到以下输出:

>     06-23 12:38:17.576   522  2676 I Netd    : Destroyed 3 sockets for UidRanges{ 10000-2147483647 } skip={1001 1027 10010 10013 10018 10021
> 10035 10037 10064 10081} in 1.2 ms

所有设备都运行 Stock Roms,我在以下方面对其进行了测试:

  • 三星 S7
  • 三星 S8
  • 连结 5x
  • 三星 S6
  • 谷歌像素

我很确定,这是一种电池节省机制,因为它不会在设备充电时发生。

我希望任何人都可以帮助我了解这里发生的事情。

最佳答案

我认为问题出在 Android 6.0 API 级别 23 中引入的新 Doze 功能,enhanced in Android 7.0 .

Doze improves battery life by deferring CPU and network activities when a user leaves a device unplugged, stationary, and with the screen turned off. Android 7.0 brings further enhancements to Doze by applying a subset of CPU and network restrictions while the device is unplugged with the screen turned off, but not necessarily stationary, for example, when a handset is traveling in a user’s pocket.

打瞌睡限制

在打瞌睡时,以下限制适用于您的应用:

  • 网络访问已暂停。
  • 系统忽略唤醒锁。
  • 标准的 AlarmManager 警报(包括 setExact() 和 setWindow())被推迟到下一个维护窗口。
    • 如果您需要设置在打瞌睡时触发的警报,请使用 setAndAllowWhileIdle() 或 setExactAndAllowWhileIdle()。
    • 使用 setAlarmClock() 设置的闹钟会继续正常触发——系统会在这些闹钟触发前不久退出打盹模式。
  • 系统不执行 Wi-Fi 扫描。
  • 系统不允许同步适配器运行。
  • 系统不允许JobScheduler运行

话虽如此,从技术上讲,您有两种选择 - 拥抱 Doze,与它抗争。

拥抱打瞌睡

查看Optimizing for Doze and App Standby

打瞌睡

dumpsys deviceidle disable 的组合,将 idle_tomax_idle_to 设置为 1 秒(并将相关的比例因子设置为 1)将有助于禁用它。引用这个xda-developers post .

关于java - 当设备未连接到充电器时,NetD 会销毁 socket ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44721418/

相关文章:

android - 如何避免每次远程运行 Android 应用程序时手动打开、滑动和解锁屏幕

android访问来自不同包的默认共享首选项

android - 如何在 Delphi 中使用自定义 debug.keystore?

android - 在 String ArrayAdapter 支持的 ListView 上使用 TextWatcher 进行过滤返回空结果

Java 空输入方法

java - 使用 apache.commons.math 库处理 java "cannot find symbol"错误

android - 带有从上到下菜单的抽屉导航?

java - GWT 菜单栏在鼠标移出时隐藏

java - 如何使用 Selenium 和 Java 从多选列表中获取所选选项的文本

java - Spring : Error in mapping request (No mapping found for HTTP request with URI)