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