深入剖析Android中Service和Thread區別_Android

來源:互聯網
上載者:User

Service既不是進程也不是線程,它們之間的關係如下:

可以看到,它們的線程id完全是一樣的,由此證實了Service確實是運行在主線程裡的,也就是說如果你在Service裡編寫了非常耗時的代碼,程式必定會出現ANR的

你可能會驚呼,這不是坑爹麼!?那我要Service又有何用呢?其實大家不要把後台和子線程聯絡在一起就行了,這是兩個完全不同的概念。Android的後台就是指,它的運行是完全不依賴UI的。即使Activity被銷毀,或者程式被關閉,只要進程還在,Service就可以繼續運行。比如說一些應用程式,始終需要與伺服器之間始終保持著心跳串連,就可以使用Service來實現。你可能又會問,前面不是剛剛驗證過Service是運行在主線程裡的嗎?在這裡一直執行著心跳串連,難道就不會阻塞主線程的運行嗎?當然會,但是我們可以在Service中再建立一個子線程,然後在這裡去處理耗時邏輯就沒問題了。

額,既然在Service裡也要建立一個子線程,那為什麼不直接在Activity裡建立呢?這是因為Activity很難對Thread進行控制,當Activity被銷毀之後,就沒有任何其它的辦法可以再重新擷取到之前建立的子線程的執行個體。而且在一個Activity中建立的子線程,另一個Activity無法對其進行操作。但是Service就不同了,所有的Activity都可以與Service進行關聯,然後可以很方便地操作其中的方法,即使Activity被銷毀了,之後只要重新與Service建立關聯,就又能夠擷取到原有的Service中Binder的執行個體。因此,使用Service來處理背景工作,Activity就可以放心地finish,完全不需要擔心無法對背景工作進行控制的情況。

以上就是小編為大家帶來的深入剖析Android中Service和Thread區別的全部內容了,希望對大家有所協助,多多支援雲棲社區~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.