進程和線程是現代網絡操作系統的核心概念。Android作為一種優秀的、承襲Linux的移動操作系統,其進程和線程的概念是開發者和安全工作人員需要深入了解的問題。本文將詳細介紹Android中的進程、線程以及相關的技術問題。
進程和線程的基本概念
當一個應用程序開始運行它的第一個組件時,Android會為它啟動一個Linux進程,并在其中執行一個單一的線程。默認情況下,應用程序所有的組件均在這個進程的這個線程中運行。然而,你也可以安排組件在其他進程中運行,而且可以為任意進程衍生出其它線程。
Android中的進程
組件運行所在的進程由manifest文件所控制。組件元素——
所有的組件實例都位于特定進程的主線程內,而對這些組件的系統調用也將由那個線程進行分發。一般不會為每個實例創建線程。因此,某些方法總是運行在進程的主線程內,這些方法包括諸如View.onKeyDown()這樣報告用戶動作以及生命周期通告的。這意味著組件在被系統調用的時候,不應該施行長時間的抑或阻塞的操作(諸如網絡相關操作或是循環計算),因為這將阻塞同樣位于這個進程的其它組件的運行。你應該如同下面線程部分所敘述的那樣,為這些長時間操作衍生出一個單獨的線程進行處理。
在可用內存不足而又有一個正在為用戶進行服務的進程需要更多內存的時候,Android有時候可能會關閉一個進程。而在這個進程中運行著的應用程序也因此被銷毀。當再次出現需要它們進行處理的工作的時候,會為這些組件重新創建進程。
在決定結束哪個進程的時候,Android會衡量它們對于用戶的相對重要性。比如說,相對于一個仍有用戶可見的activity的進程,它更有可能去關閉一個其activity已經不為用戶所見的進程。也可以說,決定是否關閉一個進程主要依據在那個進程中運行的組件的狀態。
Android中的線程
盡管你可以把你的應用程序限制于一個單獨的進程中,有時,你仍然需要衍生出一個線程以處理后臺任務。因為用戶界面必須非常及時的對用戶操作做出響應,所以,控管activity的線程不應用于處理一些諸如網絡下載之類的耗時操作。所有不能在瞬間完成的任務都應安排到不同的線程中去。
線程在代碼中是以標準JavaThread對象創建的。Android提供了很多便于管理線程的類:Looper用于在一個線程中運行一個消息循環,Handler用于處理消息,HandlerThread 用于使用一個消息循環啟用一個線程。
RPC:遠程過程調用
Android有一個輕量級的遠程過程調用(RPC)機制:即在本地調用一個方法,但在遠程(其它的進程中)進行處理,然后將結果返回調用者。這將方法調用及其附屬的數據以系統可以理解的方式進行分離,并將其從本地進程和本地地址空間傳送至遠程過程和遠程地址空間,并在那里重新裝配并對調用做出反應。返回的結果將以相反的方向進行傳遞。Android提供了完成這些工作所需的所有的代碼,以使你可以集中精力來實現RPC接口本身。
RPC接口可以只包括方法。即便沒有返回值,所有方法仍以同步的方式執行(本地方法阻塞直至遠程方法結束)。
Copyright@ 2011-2016 版權所有:大連千億科技有限公司 遼ICP備11013762-3號 google網站地圖 百度網站地圖 網站地圖
公司地址:大連市沙河口區中山路692號辰熙星海國際2317 客服電話:0411-39943997 QQ:2088827823 37482752
法律聲明:未經許可,任何模仿本站模板、轉載本站內容等行為者,本站保留追究其法律責任的權利! 隱私權政策聲明