- Android開發藝術探索
- 任玉剛
- 1048字
- 2019-01-10 17:37:36
2.1 Android IPC簡介
IPC是Inter-Process Communication的縮寫,含義為進程間通信或者跨進程通信,是指兩個進程之間進行數據交換的過程。說起進程間通信,我們首先要理解什么是進程,什么是線程,進程和線程是截然不同的概念。按照操作系統中的描述,線程是CPU調度的最小單元,同時線程是一種有限的系統資源。而進程一般指一個執行單元,在PC和移動設備上指一個程序或者一個應用。一個進程可以包含多個線程,因此進程和線程是包含與被包含的關系。最簡單的情況下,一個進程中可以只有一個線程,即主線程,在Android里面主線程也叫UI線程,在UI線程里才能操作界面元素。很多時候,一個進程中需要執行大量耗時的任務,如果這些任務放在主線程中去執行就會造成界面無法響應,嚴重影響用戶體驗,這種情況在PC系統和移動系統中都存在,在Android中有一個特殊的名字叫做ANR(Application Not Responding),即應用無響應。解決這個問題就需要用到線程,把一些耗時的任務放在線程中即可。
IPC不是Android中所獨有的,任何一個操作系統都需要有相應的IPC機制,比如Windows上可以通過剪貼板、管道和郵槽等來進行進程間通信;Linux上可以通過命名管道、共享內容、信號量等來進行進程間通信??梢钥吹讲煌牟僮飨到y平臺有著不同的進程間通信方式,對于Android來說,它是一種基于Linux內核的移動操作系統,它的進程間通信方式并不能完全繼承自Linux,相反,它有自己的進程間通信方式。在Android中最有特色的進程間通信方式就是Binder了,通過Binder可以輕松地實現進程間通信。除了Binder, Android還支持Socket,通過Socket也可以實現任意兩個終端之間的通信,當然同一個設備上的兩個進程通過Socket通信自然也是可以的。
說到IPC的使用場景就必須提到多進程,只有面對多進程這種場景下,才需要考慮進程間通信。這個是很好理解的,如果只有一個進程在運行,又何談多進程呢?多進程的情況分為兩種。第一種情況是一個應用因為某些原因自身需要采用多進程模式來實現,至于原因,可能有很多,比如有些模塊由于特殊原因需要運行在單獨的進程中,又或者為了加大一個應用可使用的內存所以需要通過多進程來獲取多份內存空間。Android對單個應用所使用的最大內存做了限制,早期的一些版本可能是16MB,不同設備有不同的大小。另一種情況是當前應用需要向其他應用獲取數據,由于是兩個應用,所以必須采用跨進程的方式來獲取所需的數據,甚至我們通過系統提供的ContentProvider去查詢數據的時候,其實也是一種進程間通信,只不過通信細節被系統內部屏蔽了,我們無法感知而已。后續章節會詳細介紹ContentProvider的底層實現,這里就先不做詳細介紹了??傊?,不管由于何種原因,我們采用了多進程的設計方法,那么應用中就必須妥善地處理進程間通信的各種問題。