国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Android的進(jìn)程與單線程模型淺析

2011-12-10 04:58源,劉
儀器儀表用戶 2011年5期
關(guān)鍵詞:前臺線程進(jìn)程

汪 源,劉 芳

(大連交通大學(xué)教務(wù)處,大連116021)

0 引言

Android一詞本義指機(jī)器人,Google于2007年11月發(fā)布了以Android命名的開源移動設(shè)備綜合平臺,包括其基于Linux的操作系統(tǒng)、中間件和關(guān)鍵的手機(jī)應(yīng)用。并且組建了開放手機(jī)聯(lián)盟,其成員囊括了全球著名的各大手機(jī)生產(chǎn)商和移動運(yùn)營商。2008年8月,Google又發(fā)布了網(wǎng)上應(yīng)用商店Android Market。任何一個開發(fā)者只需要借助Android發(fā)布的SDK開發(fā)手機(jī)應(yīng)用,即可把開發(fā)的應(yīng)用在Android Market上銷售。目前Android Market上已經(jīng)有一萬多的應(yīng)用程序,大大豐富了Android手機(jī)用戶的功能。一個完整的產(chǎn)業(yè)鏈已經(jīng)形成。

1 基本概念

1.1 Android

Android是基于Linux內(nèi)核的操作系統(tǒng),是Google公司在2007年11月5日公布的手機(jī)操作系統(tǒng),早期由Google開發(fā),后由開放手持設(shè)備聯(lián)盟(Open Handset Alliance)開發(fā)。它采用了軟件堆層(software stack,又名以軟件疊層)的架構(gòu),主要分為三部分。底層Linux內(nèi)核只提供基本功能;其他的應(yīng)用軟件則由各公司自行開發(fā),部分程序以Java編寫[2]。

2010年末數(shù)據(jù)顯示,僅正式推出兩年的操作系統(tǒng)Android已經(jīng)超越稱霸十年的諾基亞(Nokia)Symbian OS系統(tǒng),采用Android系統(tǒng)主要手機(jī)廠商包括宏達(dá)電子(HTC)、三星(SAMSUNG)、摩托羅拉(MOTOROLA)、LG、Sony Ericsson、魅族 M9、聯(lián)想(LENOVO)、中興通訊(ZTE)、華為等,使之躍居全球最受歡迎的智能手機(jī)平臺,Android系統(tǒng)不但應(yīng)用于智能手機(jī),也在平板電腦市場急速擴(kuò)張。

1.2 Android 的進(jìn)程

當(dāng)一個程序第一次啟動的時候,什么是素質(zhì)模型,Android會啟動一個LINUX進(jìn)程和一個主線程。默認(rèn)的情況下,所有該程序的組件都將在該進(jìn)程和線程中運(yùn)行。同時,Android會為每個應(yīng)用程序分配一個單獨(dú)的LINUX用戶。Android會盡量保留一個正在運(yùn)行進(jìn)程,只在內(nèi)存資源出現(xiàn)不足時,Android會嘗試停止一些進(jìn)程從而釋放足夠的資源給其他新的進(jìn)程使用,也能保證用戶正在訪問的當(dāng)前進(jìn)程有足夠的資源去及時的響應(yīng)用戶的事件[3]。Android會根據(jù)進(jìn)程中運(yùn)行的組件類別以及組件的狀態(tài)來判斷該進(jìn)程的重要性,Android會首先停止那些不重要的進(jìn)程。按照重要性從高到低一共有五個級別:

1)前臺進(jìn)程

前臺進(jìn)程是用戶當(dāng)前正在使用的進(jìn)程。只有一些前臺進(jìn)程可以在任何時候都存在。他們是最后一個被結(jié)束的,當(dāng)內(nèi)存低到根本連他們都不能運(yùn)行的時候。一般來說,在這種情況下,設(shè)備會進(jìn)行內(nèi)存調(diào)度,中止一些前臺進(jìn)程來保持對用戶交互的響應(yīng)。

2)可見進(jìn)程

可見進(jìn)程不包含前臺的組件但是會在屏幕上顯示一個可見的進(jìn)程,其重要程度很高,除非前臺進(jìn)程需要獲取它的資源,不然不會被中止[4]。

3)服務(wù)進(jìn)程

運(yùn)行著一個通過 startService方法啟動的 service,這個service不屬于上面提到的2種更高重要性的進(jìn)程。service所在的進(jìn)程雖然對用戶不是直接可見的,但是他們執(zhí)行了用戶非常關(guān)注的任務(wù)(比如播放mp3,下載數(shù)據(jù)等)。只要前臺進(jìn)程和可見進(jìn)程有足夠的內(nèi)存,系統(tǒng)不會回收他們。

4)后臺進(jìn)程

運(yùn)行著一個對用戶不可見的activity。這些進(jìn)程對用戶體驗沒有直接的影響,可以在服務(wù)進(jìn)程、可見進(jìn)程、前臺進(jìn)程需要內(nèi)存的時候回收。通常系統(tǒng)中會有很多不可見進(jìn)程在運(yùn)行,他們被保存在LRU(least recently used)列表中,以便內(nèi)存不足的時候被第一時間回收。如果一個activity正確的執(zhí)行了它的生命周期,關(guān)閉這個進(jìn)程對于用戶體驗沒有太大的影響[5]。

5)空進(jìn)程

未運(yùn)行任何程序組件。運(yùn)行這些進(jìn)程的唯一原因是作為一個緩存,縮短下次程序需要重新使用的啟動時間。系統(tǒng)經(jīng)常中止這些進(jìn)程,這樣可以調(diào)節(jié)程序緩存和系統(tǒng)緩存的平衡。

Android對進(jìn)程的重要性評級的時候,選取它最高的級別。另外,當(dāng)被另外的一個進(jìn)程依賴的時候,某個進(jìn)程的級別可能會增高。一個為其他進(jìn)程服務(wù)的進(jìn)程永遠(yuǎn)不會比被服務(wù)的進(jìn)程重要級低。因為服務(wù)進(jìn)程比后臺activity進(jìn)程重要級高,因此一個要進(jìn)行耗時工作的activity最好啟動一個service來做這個工作,而不是開啟一個子進(jìn)程。特別是這個操作需要的時間比activity存在的時間還要長的時候。例如,在后臺播放音樂,向網(wǎng)上上傳圖片等。使用service可以使進(jìn)程最少獲取到“服務(wù)進(jìn)程”級別的重要級,而不用考慮activity目前是什么狀態(tài)。

2 Android的單線程模型

當(dāng)一個程序第一次啟動時,Android會同時啟動一個對應(yīng)的主線程(Main Thread),主線程主要負(fù)責(zé)處理與UI相關(guān)的事件,如:用戶的按鍵事件,用戶接觸屏幕的事件以及屏幕繪圖事件,并把相關(guān)的事件分發(fā)到對應(yīng)的組件進(jìn)行處理。所以主線程通常又被叫做UI線程。在開發(fā)Android應(yīng)用時必須遵守單線程模型的原則:Android UI操作并不是線程安全的并且這些操作必須在UI線程中執(zhí)行[6]。

應(yīng)用時必須遵守單線程模型的原則:Android UI操作并不是線程安全的并且這些操作必須在UI線程中執(zhí)行。由于UI線程負(fù)責(zé)事件的監(jiān)聽和繪圖,因此,必須保證UI線程能夠隨時響應(yīng)用戶的需求,UI線程里的操作應(yīng)該向中斷事件那樣短小,費(fèi)時的操作(如網(wǎng)絡(luò)連接)需要另開線程,否則,如果UI線程超過5s沒有響應(yīng)用戶請求,會彈出對話框提醒用戶終止應(yīng)用程序[7]。

如果在新開的線程中需要對UI進(jìn)行設(shè)定,就可能違反單線程模型,因此android采用一種復(fù)雜的Message Queue機(jī)制保證線程間通信。

3 結(jié)束語

本文首先介紹了Android的進(jìn)程與單線程模型及其原則。進(jìn)一步認(rèn)識和理解Android的單線程模型及其原則。由于更多地關(guān)注Android的進(jìn)程與單線程模型,本文或許不足以幫助讀者全面的認(rèn)識Android技術(shù),關(guān)于文中提到的其他技術(shù)細(xì)節(jié)以及Android的其他相關(guān)技術(shù)可以訪問Android的官方網(wǎng)站進(jìn)行進(jìn)一步的了解和學(xué)習(xí)。

[1]田亞平.智能終端OS之博愈烈Android能否分一杯羹[J].今日電子,2009,(3):23.

[2]http://baike.baidu.com/view/3091265.htm(網(wǎng)絡(luò)資料)

[3] http://www.cnmsdn.com/html/201010/1287295341ID8320.html(網(wǎng)絡(luò)資料)

[4]孫曉宇.Android手機(jī)界面管理系統(tǒng)的設(shè)計與實現(xiàn)[D].北京:北京郵電大學(xué),2009.

[5]許翠蘋.手機(jī)操作系統(tǒng)列強(qiáng)爭霸進(jìn)行時[J].通訊世界,2010,(7):24-25.

[6]王軍偉,武巖,易勇.淺論Android線程模型[J].中國電子商務(wù),2009,(9):72.

[7]張誠潔.Android在線圖書閱讀器設(shè)計與實現(xiàn)[J].微計算機(jī)應(yīng)用,2010,31(10):77-80.

猜你喜歡
前臺線程進(jìn)程
5G終端模擬系統(tǒng)隨機(jī)接入過程的設(shè)計與實現(xiàn)
實時操作系統(tǒng)mbedOS 互斥量調(diào)度機(jī)制剖析
淺析體育賽事售票系統(tǒng)錯票問題的對策研究
中式琴房設(shè)計方案
有效把握政治新形勢 積極推動黨建工作進(jìn)程
債券市場對外開放的進(jìn)程與展望
龐鮮、盧栩楓室內(nèi)設(shè)計作品
快速殺掉頑固進(jìn)程
龐鮮、周衍耀室內(nèi)設(shè)計作品
孟晚舟:從前臺打雜到華為副總裁
临西县| 泰兴市| 仙桃市| 渭南市| 洞口县| 明溪县| 峨山| 云梦县| 卓资县| 浦县| 北辰区| 腾冲县| 伊宁县| 衢州市| 武隆县| 阿勒泰市| 黔西| 泰和县| 东丰县| 静安区| 集贤县| 丰镇市| 汪清县| 清苑县| 伊宁县| 桃园县| 隆昌县| 清水河县| 凤山市| 固始县| 昌图县| 延长县| 通辽市| 思南县| 深水埗区| 大新县| 固阳县| 新化县| 南漳县| 夏津县| 利津县|