IPC機制-Android IPC簡介

IPC是Inter-Process Communication的縮寫,含義位進程間通信或者跨進程通信,是指兩個進程之間進行數據交換的過程。說起進程間通訊,我們首先要理解什麼是進程,什麼是線程,進程和線程是截然不同的概念。按照操作系統中的描述,線程是CPU調度最小的單元,同時線程是一種有限的系統資源。而進程一般是指執行一個單元,再PC和移動設備上只一個程序或者一個應用。一個進程可以包含多個線程,因此進程和線程是包含與被包含的關係。最簡單的情況下,一個進程中可以有一個線程,即主線程,再Android裏面主線程也叫UI線程,再UI線程裏才能操作界面元素。很多時候,一個進程中需要執行大量耗時的任務,如果這些任務放在主線程中去執行就會造成界面無法響應,嚴重影響用戶體驗,這種情況再PC系統和移動系統中都存在,再Android中有一個特殊的名字叫做ANR(Application Not Responding),即應用無響應。解決這個問題就需要用到線程,把一些耗時的任務放在線程中即可。


IPC不是Android中所獨有的,任何一個操作系統都需要有相應的IPC機制,比如Windows上可以通過剪切板、管道、和郵槽等來進行進程間通訊;Linux上可以通過命名管道、共享內容、信號量來進行進程間通訊。可以看到不同的操作系統平臺有着不同的進程間通訊方式,對於Android來說,他是一種基於Linux內核的移動操作系統,它的進程間通信方式並不完全繼承自Linux,相反,它有自己的進程間通信方式。再Android中最有特色的進程間通訊方式就是Binder了,通過Binder可以輕鬆地實現進程間通信,當然同一個設備上地兩個進程通過Socket通信自然也是可以的。


說到IPC的使用場景就必須提到多進程,只有面對多進程這種情況下,菜需要考慮進程間通信。這個是很好理解的,如果只有一個進程再運行,又何談多進程呢?多進程的情況分爲兩種。第一種是一個應用因爲某些原因自身需要採用多進程模式來實現,至於原因,可能有很多,比如有些模塊由於特殊原因需要運行再單獨的進程中,又或者爲了加大一個應用可是要的內存所以需要通過多進程來獲取多分內存控件。Android對單個應用所使用的最大內存做了限制,早期的一些版本可能是16MB,不同設備有不同的大小。令一種情況是當前應用需要向其他的應用獲取數據。由於是兩個應用,所以必須採用跨進程的方式來獲取所需的數據,甚至我們通過系統提供的ContentProvider去查詢數據的時候,其實也是一種進程間通訊,只不過通信細節被系統內部屏蔽了,我們無法感知而已。後續章節會詳細介紹ContentProvider的底層實現,這裏就先不做詳細介紹了。總之,不管由於何種原因,我們採用了多進程的設計方式,那麼應用中就必須妥善地處理進程間通信的各種問題了。


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