我有一个非常讨厌的问题,我不明白发生了什么:
我们正在编写一个库,通过蓝牙构建套接字。之后,我们在localhost上注册一个服务器。现在有几个应用程序正在建立与localhost的连接并发送/接收数据。服务器捆绑连接并通过蓝牙处理通信。
自Android 7.0以来,我们遇到了这个问题; NetD
经常将我们的套接字破坏到localhost。我们可以在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,我测试了以下内容:
我很确定,这是一种省电机制,因为在为设备充电时不会发生这种情况。
我希望有人能帮助我理解这里发生的事情。
答案 0 :(得分:3)
我认为问题来自于Android 6.0 API Level 23,enhanced in Android 7.0中引入的新Doze
功能。
Doze通过延迟CPU和网络活动来延长电池寿命 当用户将设备拔出,固定不动并与屏幕一起时 关掉。 Android 7.0为Doze带来了进一步的增强功能 在设备运行时应用CPU和网络限制的子集 在屏幕关闭时拔掉插头,但不一定是静止的, 例如,当手机在用户的口袋里旅行时。
打盹限制
以下限制适用于您在Doze中的应用:
据说,你在技术上有两种选择 - 拥抱Doze,对抗它。
拥抱打瞌睡
浏览Optimizing for Doze and App Standby
打瞌睡
dumpsys deviceidle disable
,将idle_to
和max_idle_to
设置为1秒(以及关联的缩放系数为1)的组合将有助于禁用它。请参阅此xda-developers post。