android tcp tcp阻塞 线程不运行,Android tcp优化
在開發過程中,我們經常會用到TCP/IP連接實現即時數據傳輸,對于java Server 來說如果用在PC段問題不會太大,在PC上資源空間相對比較大,呆在手機上不一樣,要考慮很多問題,下面我說說在手機客戶端實現TCP/IP連接中,我們討論下一下幾個問題:
第一,耗電
關于耗掉問題,我想很多朋友開發中也遇到過,其實在android中耗電主要是因為占用cpu時間長和一些感應器的使用,java中藥實現長連接基本上都要實現兩個線程一個接收一個發送數據,分分秒秒都在跑著兩個線程對于手機來說能不耗電嗎?當然。那我們要怎樣解決呢,我這里給出幾個建議,在android中,發消息線程我們可以用一個線程池,有消息發時跑一下相對沒那么耗cpu這樣不會一直占用cpu了,但是對于接收消息怎么解決呢,對于即時消息來說你不能讓他等待一會再跑一下看看有沒有消息吧,這樣給用戶體驗很不好,一直輪詢的跑看看又沒消息有很耗電給人感覺這軟件怎么那么流氓不知道在搞什么那么耗電,這樣可能就不想用了。那怎么辦?這里我給一個建議就是可以使用C/C++自己去封裝一個TCP/IP長連接的庫,這個庫我們可以簡單得實現連接,斷開,還有發消息(發送線程可以不在這里處理),接收消息(接收線程在這里處理),在C/C++中可以Socket使用阻塞模式接收消息(即,有消息就接收沒消息就自動等等在哪里),這樣消息也能即時接收,耗電量也相對少很多,這個接收線程可以做得相對簡單點,只接收數據,然后直接回調給上層處理就可以。
第二,內存
手機中內存使用也是很致命,雖然現在的手機內存已經不小了,但是他不是只供應你一個應用使用,所以還得處理耗沒有個空間,比如我們發送消息時會有很多數據包,發出去了也就不處理了。這樣很多對象就沒有得到及時得回收。我建議我們把發送完后的包以及接收到的包處理完后我們順便把他置空,這樣回收就會相對及時一些。
第三,保持長連接
長連接很多朋友都知道使用,定時發送心跳包來維持,但是如果直接啟用一個線程來去觸發發送又是一個大隱患(耗電),在android 中我們可以使用定時廣播機制實現,我們可以設定廣播時間然后再廣播接收器中發送心跳包,這個心跳包我們可以直接發送不適用線程,對于發送心跳來說比較頻繁,使用線程還是會耗電,第二,我們心跳其實不需要一天到晚得發送,我們可以在用戶使用完或者鎖屏后25分鐘就暫停發送,然后再過25分鐘喚醒連接看看有沒有消息有就接收,沒有繼續斷開,如果用戶打開應用到停止使用有等待25分鐘斷開然后再連接查看離線消息,這一個循環又能保證新消息的接收又不會一直占用CPU。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的android tcp tcp阻塞 线程不运行,Android tcp优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么更改u盘启动盘格式 修改U盘启动盘的
- 下一篇: 怎么进入u盘主菜单 U盘主菜单怎么打开