2017-06-23 47 views
2

我有一個很煩人的問題,我不明白髮生了什麼:NETD破壞插座,當設備沒有連接到充電器

我們正在寫一庫,即建立了通過藍牙的插座。之後,我們在本地主機上註冊一個服務器。現在幾個應用程序正在建立到本地主機的連接併發送/接收數據。服務器捆綁連接並通過藍牙處理通信。

自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 

所有設備都在運行股票ROM和我測試了它在以下方面:

  • 三星S7
  • 三星S8
  • 的Nexus 5X
  • Samsung S6
  • Google Pixel

我很確定,它是一種電池節省機制,因爲它在充電時不會發生。

我希望任何人都能幫助我理解這裏發生的事情。

回答

1

我認爲問題來自Android 6.0 API Level 23,enhanced in Android 7.0中引入的新的Doze功能。

打盹通過當用戶離開一個設備拔出,固定延遲CPU和網絡活動 提高電池壽命,並與屏幕 關閉。例如,當手機在用戶的口袋裏旅行時,Android 7.0通過 應用了CPU和網絡限制的子集進一步增強了打盹,而設備是 ,拔下了關閉的屏幕,但不一定是固定的。

打盹限制

以下限制適用於您的應用程序,而在打盹:

  • 網絡訪問被暫停。
  • 系統忽略喚醒鎖。
  • 標準的AlarmManager報警(包括setExact()和setWindow())被推遲到下一個維護窗口。
    • 如果您需要設置在瞌睡時觸發的警報,請使用setAndAllowWhileIdle()或setExactAndAllowWhileIdle()。
    • 用setAlarmClock()設置的警報繼續正常激活 - 系統在這些警報激發之前不久就打瞌睡。
  • 系統不執行Wi-Fi掃描。
  • 系統不允許同步適配器運行。
  • 該系統不允許的jobscheduler運行

雖這麼說,你在技術上有兩個選擇 - 擁抱打盹,豁出去了。

環抱打盹

越過Optimizing for Doze and App Standby

格鬥打盹

dumpsys deviceidle disable的組合,設定idle_tomax_idle_to至1秒(和相關聯的定標因子爲1)將有助於在禁用它。請參閱此xda-developers post

+0

謝謝!這是解決方案。對我感到羞恥,我沒有想過... – andzie

+0

很高興我能幫忙! – Dayan