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