關於android實現聊天: Service +BroadcastReceiver

平 常常常有一些Android愛好者問我Android服務有什麼用,跟線程不是差很少嗎,還有Service是繼承Context 是否是跟Activity有相同的特性。還有常常在CSDN上也趕上好多朋友問到這樣的問題,看到他們的問題後,我思考了很久,總結出一個問題是他們把 Service與Activity和Thread之間的區別與聯繫弄混了,其實他們之間是有異同的。接下來我從不一樣的角度來分析一下他們之間的異同: 1. 1.Thread在run執行完後線程自動消失,而Service用戶不調用stopService()服務就不會中止。 2. Activity與Service 都繼承至Context,他們具備Context共同的特性,好比啓動服務、註冊廣播等。 3. 能夠同時建立多個Thread和Activity,而Service只能建立一個進程空間。 4. Service能夠開機自動啓動,而其它任何進程不能實現開機自動啓動。 5. Thread能夠處理耗時操做,而Activity與Service不能實現耗時操做。 以上是他們所存在的異同,從以上異同我爲你們總結一下Service所使用的場景: 1. .打電話、接電話功能:一個電話只有一個電話管理的服務,它不可能有兩個服務來管理這個電話的接聽與拔出,這樣的狀況下可     以使用服務,而且該服務須要在手機開機後會當即啓動,這樣的功能只有服務才能作到。假如咱們不使用服務而使用Thread,能夠想象打進來的一個電話會被 多少Thread所監聽到。 2. 即時聊天功能的接收使用的廣播:今後面一個緣由能夠看出,服務只能存在一個,因此咱們也能夠推算出,若是在一個服務的onCreate裏面建立一個對象, 那這個對象永遠也是惟一的。通常咱們啓動一個服務都會隨之註冊一個廣播,此廣播由於在服務裏面註冊,因此此廣播也是系統惟一的。因此此廣播通常都是隨着服 務的開啓就被註冊,服務的中止就被註銷。因此像即時聊天功能的應用,通常是在啓動一個服務,此服務就註冊一個廣播,此廣播接收從Socket接收到的數 據,將數據在廣播裏面處理完後就發送給UI層。假如咱們使用Thread來接收Socket的數據,若是Thread啓動了多個,那Socket接收的數 據可能 就被多個Thread所接收,因此發送給界面的入口就多了。有人會問爲何把廣播放在Service裏面註冊,我想,若是廣播不在Service裏面註冊 那只有在Activity裏面註冊,若是Activity關閉了你又將如何監聽網絡的數據,若是關機了,你想開機自動監聽又將如何監聽。因此服務裏面搭配 一個應用惟一的廣播,是即時通信功能裏面經常使用的手法。
相關文章
相關標籤/搜索