謝光+劉志惠
摘 要
在Android手機(jī)開發(fā)過程中,一般情況下程序是通過一個(gè)線程進(jìn)行工作的,因此當(dāng)一個(gè)任務(wù)耗費(fèi)過長時(shí)間,就會(huì)造成主程序無響應(yīng)并對(duì)程序運(yùn)行的順暢程度造成影響的問題。基于此,本文通過對(duì)多線程組成進(jìn)行介紹,在Android中多線程技術(shù)模塊與具體實(shí)現(xiàn)方式兩方面對(duì)多線程技術(shù)在安卓手機(jī)開發(fā)中的運(yùn)用進(jìn)行探討,以為關(guān)注此問題的人們提供參考。
【關(guān)鍵詞】多線程技術(shù) Android手機(jī) 進(jìn)程 線程
安卓系統(tǒng)自2007年由谷歌公司開發(fā)后,得到了巨大的發(fā)展。截至2017年3月,其市場占有率已經(jīng)達(dá)到86.4%,如三星、索尼愛立信、小米、OPPO等手機(jī)生產(chǎn)廠商都在使用安卓系統(tǒng)。該系統(tǒng)開源免費(fèi)、執(zhí)行效率高,其多線程技術(shù)開發(fā)應(yīng)用的研究,對(duì)提高手機(jī)硬件的利用效率,給用戶帶來良好試用體驗(yàn),提高手機(jī)廠商的企業(yè)競爭力有重要作用。
1 多線程介紹
1.1 進(jìn)程和線程介紹
一般來說,在一定時(shí)間內(nèi)實(shí)現(xiàn)多個(gè)程序任務(wù)執(zhí)行的程序都會(huì)用到“進(jìn)程”這一概念。進(jìn)程,即:一個(gè)擁有自身獨(dú)立的內(nèi)存空間、系統(tǒng)資源的執(zhí)行程序,其特征為實(shí)現(xiàn)內(nèi)部狀態(tài)和內(nèi)部數(shù)據(jù)的相互獨(dú)立。線程與進(jìn)程相似,線程也是一段有一定功能代碼組成的流控制。線程的特征為:同類的多個(gè)線程可以對(duì)內(nèi)存空間與系統(tǒng)資源進(jìn)行共享。因此在對(duì)資源的占用方面,可以相互切換的線程比進(jìn)程小很多。一個(gè)進(jìn)程中可以包含諸多線程,此外,主線程對(duì)子線程有控制作用,可對(duì)子線程啟動(dòng)、停止等動(dòng)作進(jìn)行管理。而本文要重點(diǎn)介紹的多線程,指的是單個(gè)程序中一起運(yùn)行的不同線程,不同線程可以執(zhí)行不一樣的任務(wù)。其特征是一個(gè)程序的多行語句可在某時(shí)間同時(shí)執(zhí)行。
1.2 多線程程序消息處理原理
當(dāng)人們啟動(dòng)一個(gè)程序時(shí),系統(tǒng)將建立main線程,主要管理如:activity等應(yīng)用組件,并對(duì)UI相關(guān)的事件進(jìn)行處理,比如用戶想要按鍵或使用屏幕進(jìn)行繪圖,線程會(huì)對(duì)以上事件進(jìn)行處理,這是UI線程。安卓的線程模型,所有組件均在main線程中,因此用戶在程序中下達(dá)下載文件、使用數(shù)據(jù)庫等具有高耗時(shí)特征的操作時(shí),就會(huì)造成UI線程的運(yùn)行不暢,并出現(xiàn)程序無法響應(yīng)的問題。這就要求程序員使用多線程技術(shù),在進(jìn)行安卓多線程編寫時(shí),技術(shù)人員應(yīng)注意以下兩點(diǎn):
(1)UI線程不能被阻塞。
(2)只可以在UI線程的內(nèi)部進(jìn)行UI操作并使用工具包。
線程核心方法的實(shí)現(xiàn)通常用run方法,程序員將run方法中放入程序需要處理的事件,在線程被啟動(dòng)時(shí),通過調(diào)用run方法實(shí)現(xiàn)程序的執(zhí)行。
2 多線程技術(shù)在Android手機(jī)開發(fā)中的運(yùn)用
2.1 Android開發(fā)中多線程結(jié)構(gòu)模塊
在判定一個(gè)系統(tǒng)是否成熟時(shí),技術(shù)人員要關(guān)注一下幾點(diǎn):運(yùn)行的速度是否快速,響應(yīng)速度的快慢,安全性能的強(qiáng)弱等等。多線程的應(yīng)用,可以在較大程度上提高安卓系統(tǒng)的運(yùn)行與相應(yīng)速度。安卓的多線程結(jié)構(gòu)模塊包含以下幾個(gè)方面:用于活動(dòng)的結(jié)構(gòu)模塊,此模塊主要是通過視圖來顯示包含信息現(xiàn)實(shí)和用戶動(dòng)作的反應(yīng)的圖形界面。二是用于服務(wù)的結(jié)構(gòu)模塊,此部分在進(jìn)行工作時(shí),主要在程序后臺(tái),在觸發(fā)事件時(shí)可通知程序進(jìn)行數(shù)據(jù)的更新。三是內(nèi)容、數(shù)據(jù)的提供部分,此板塊可以通過數(shù)據(jù)的管理,實(shí)現(xiàn)數(shù)據(jù)的共同使用,是一個(gè)大體積的數(shù)據(jù)存儲(chǔ)板塊。四是,此模塊通過程序的協(xié)調(diào)功能,對(duì)目標(biāo)活動(dòng)提供所需要的信息,且具有意圖說明的功用。
在所有的程序模塊中,用于活動(dòng)的結(jié)構(gòu)模塊是需要直接同用戶進(jìn)行交互的,這種功能主要是通過用戶界面得以實(shí)現(xiàn),用戶界面通過展示程序運(yùn)行情況實(shí)現(xiàn)與用戶的直接交流。若安卓的使用程序中,由于單線程的使用造成程序無法響應(yīng)、程序運(yùn)行速度過慢的問題,工作人員需要把應(yīng)用程序加載到新的線程中,以實(shí)現(xiàn)刷新主線的活動(dòng)界面內(nèi)容,實(shí)現(xiàn)對(duì)整個(gè)活動(dòng)界面的刷新。具體來說,用戶在下載文件時(shí),若文件體積過大需要較多的下載時(shí)間,那么程序需要經(jīng)此任務(wù)調(diào)離主線程,并迅速開啟新的線程完成下載。即:用戶先是打開了主界面,然后輸入網(wǎng)址,在此之后系統(tǒng)就開始對(duì)文件下載,為保證系統(tǒng)運(yùn)行速度,程序開啟一些子線程進(jìn)行下載工作,如下載完成,子線程也可以對(duì)主線程進(jìn)行消息報(bào)告,主線程在得到報(bào)告后,會(huì)再次刷新頁面。
2.2 安卓開發(fā)中的多線程實(shí)現(xiàn)方式
安卓開發(fā)中技術(shù)人員可以用兩種方法實(shí)現(xiàn)多線程:
一是對(duì)線程類Thread進(jìn)行繼承,二是實(shí)現(xiàn)Runnable接口。如要使用方式一,程序員可使用以下方式進(jìn)行編程:(1)對(duì)類Thread進(jìn)行繼承并重寫run()方法,技術(shù)人員在對(duì)類實(shí)例進(jìn)行初始化時(shí),可將目標(biāo)設(shè)置為空(null),表示由本實(shí)例來進(jìn)行對(duì)線程體的執(zhí)行。由于Java只可以進(jìn)行單重繼承,因此如采用這種方法對(duì)類進(jìn)行定義,就不可以繼承其他的父類了。在main方法里,程序員可采用new textThread()進(jìn)行子線程的創(chuàng)建,并使用Thread.start()方法實(shí)現(xiàn)子線程的啟動(dòng)。即:存在main方法的線程是主線程,并有對(duì)其他線程管理的作用。而程序員在啟動(dòng)子線程后調(diào)用run()方法,run是一個(gè)線程體,子線程里面處理的事件都是在run()方法中實(shí)現(xiàn)的。需要注意的是:線程中stop()方法也可以完成線程的停止,但會(huì)鎖死線程,因此不建議采用。
實(shí)現(xiàn)多線程的另一種方法,就是通過實(shí)現(xiàn)runnable接口,并提供一個(gè)類為線程的目標(biāo)對(duì)象,在對(duì)線程進(jìn)行構(gòu)造時(shí)可以使用兩個(gè)包含Runnable目標(biāo)參數(shù)的建成方式,一是Thread(Runnable目標(biāo)),二是Thread(Runnable目標(biāo),String name)。其中的“目標(biāo)”就是線程目標(biāo)對(duì)象。這是一個(gè)實(shí)現(xiàn)Runnable的類,在程序員對(duì)目標(biāo)對(duì)象進(jìn)行構(gòu)造時(shí),將目標(biāo)對(duì)象給這個(gè)線程的實(shí)例進(jìn)行傳遞,此時(shí)一方面目標(biāo)對(duì)象可以為Thread類提供run()方法;另一方面可以通過繼承其他父類的方式實(shí)現(xiàn)接口Runnable類。這種方法有一個(gè)轉(zhuǎn)換方式,即:程序員不實(shí)現(xiàn)Runnable接口而是實(shí)例化Thread類時(shí),對(duì)Runnable接口的內(nèi)部類進(jìn)行定義。
3 結(jié)論
綜上所述,程序員通過使用多線程技術(shù)可以加快程序的相應(yīng)與運(yùn)行速度。通過分析可得,程序員使用main做主線程并調(diào)用run()方法,實(shí)現(xiàn)runnable接口等方式可以實(shí)現(xiàn)多線程技術(shù)。因此,程序員應(yīng)采用以上辦法在安卓手機(jī)開發(fā)中運(yùn)用多線程技術(shù)。
參考文獻(xiàn)
[1]閆偉,葉建栲.多線程技術(shù)在android手機(jī)開發(fā)中的應(yīng)用[J].信息通信,2012(01):46-47.
[2]李鑫,廖正赟.多線程技術(shù)在Android手機(jī)開發(fā)中的運(yùn)用[J].通訊世界,2016(10):105.
作者簡介
謝光(1983-),男,山東省單縣人,現(xiàn)供職于三亞學(xué)院,講師、碩士學(xué)位。研究方向?yàn)閿?shù)據(jù)庫技術(shù)軟件工程。
作者單位
三亞學(xué)院 海南省三亞市 572000endprint