Android SocketClient休眠斷開的問題

之前學習了SocketClient的使用,並且用它成功實現了項目的開發(具體見本人上一篇帖子:Android SocketClient使用實例)。不過後來測到一個問題,就是打開我們的app連接上socket之後,如果點手機home鍵,切出去一會兒(大概三分鐘左右),然後再切進我們的app,經常會出現socket斷開連接的情況。

最開始以爲是心跳包的問題,因爲心跳包的收發是我們自己在客戶端實現的,不是在android原生實現的。然後各種改測,發現並不是心跳包的問題。然後懷疑是SocketClient的源碼有問題,但是檢查了下也沒看出什麼毛病,實在是鬱悶。所幸在網上看到有網友也遇到手機休眠導致socket斷開的問題,說是android系統出於節電考慮,在屏幕關閉一段時間後會將socket服務掛起。雖然情況不太一樣(畢竟人家是休眠,我的是切出去),但是導致的結果很像。抱着死馬當作活馬醫的心態,用PowerManager試了試,結果還真管用,而且鎖屏也不會導致socket斷開了!

下面是通過PowerManager設置電源模式,使cpu不進入節電模式

  1. PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);  
  2.  PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");  
  3.  wl.acquire();  
  4.    ..screen will stay on during this section..  
  5.  wl.release();  

因爲app使用activity,故在oncreate中wl.acquire();,在ondestroy中wl.release();

加權限:android.permission.WAKE_LOCK

問題到此暫時解決。

參考:https://www.jianshu.com/p/45957e180925

          https://blog.csdn.net/hhbgk/article/details/49997291


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章