中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      Android環(huán)境下主UI線程與子線程通信機制研究論文

      時間:2024-08-01 09:18:43 通信工程畢業(yè)論文 我要投稿
      • 相關推薦

      Android環(huán)境下主UI線程與子線程通信機制研究論文

        1問題的引出

      Android環(huán)境下主UI線程與子線程通信機制研究論文

        如果需要用手機從網絡上下載一個圖片到自己的手機上,在onCreate方法中可以如下圖1所示的代碼。通過代碼會獲取并顯示所需要的位圖。但其中隱藏著一個非常危險的問題——代碼本身就是運行在主線程上。Android系統(tǒng)只能運行一個主線程,而且只有主線程能夠與屏幕之間進行任意權限級別的交互。這意味著,當代碼等待網絡回傳圖片數據的時候,任何內容都無法顯示到屏幕上。這段獲取圖片的代碼會限制在手機上任意地方執(zhí)行任意操作。所以如果主線程被綁架,那么它在被釋放之前,系統(tǒng)就不會響應按單擊事件,不能接電話,屏幕上不能顯示任何內容。這對于手機用戶來說是災難性的。

        2什么是子線程

        為了有效解決手機被綁架的問題,提高用戶體驗,提出了子線程。在Android的布局界面中,可以實現按鈕的單擊、TextView內容的修改,所有這些與界面控件相關的操作,實際上都是由主UI線程在負責運行。但有時候,程序會執(zhí)行一些耗時的操作,比如復雜的計算、訪問網絡,下載數據,查詢數據庫、甚至包括讓線程休眠等,這些操作如果放到主UI線程中執(zhí)行,會造成主UI線程無法及時響應用戶在界面上的操作,造成界面假死的狀態(tài)。一般的解決方案是將耗時的操作交給另外一個子線程來執(zhí)行,從而保證主UI線程的暢通。有時候子線程在完成了一部分的耗時操作以后,希望能夠在主界面上有所體現,此時子線程是不能夠直接操作界面控件的,它必須通過消息的方式告知主UI線程進行控件更新。

        3子線程與主UI線程的通信原理

        Android應用程序運行時,一個主線程被創(chuàng)建(也稱作UI線程),此線程主要負責處理UI相關的事件,由于Android采用UI單線程模型,所以只能在主線程中對UI元素進行操作,如果在非UI線程直接對UI進行了操作,則會報錯,另外,對于運算量較大的操作和IO操作,我們需要新開線程來處理這些工作,以免阻塞UI線程,子線程與主線程之間通信原理如下圖2所示。

        從上圖2可以看出,要完成子線程與主UI線程之間的通信,需要配合多個類來完成。其中Thread類負責線程工作,要創(chuàng)建該類需要實現Runnable接口的run()方法,run()方法中一般是耗時操作的代碼。第二個類是Message類,用來描述消息,在Message對象中可以存儲一些信息。第三個類是Handler類,用來發(fā)送和接受消息,要創(chuàng)建該類需要實現handleMessage(Messagemsg)方法,該方法會在Handler對象接收到消息時被調用。那么這三個類之間協(xié)同合作,才能有序地完成子線程與主UI線程之間的通信。

        3.1Thread類

        要創(chuàng)建子線程對象,就需要使用Thread類。要創(chuàng)建該類需要實現Runnable接口的抽象方法run(),在run()方法中需要添加子線程所要運行任務的代碼。其次,Sleep(longtime)方法是讓線程休眠,其中time為休眠的時間,單位時毫秒。最后一定要用start()方法運行線程。之后該子線程就可以開始工作了。

        子線程在特定情況下需要通過Handler發(fā)送Message給主UI線程,委托主UI線程進行一些與界面相關的處理,所以,發(fā)送消息的Handler類也是其中的一個很重要的類。

        3.2Message類

        Message類型的消息中包含了一個int類型的成員對象what,利用what可以區(qū)分不同的消息類型。返回值有兩種情況,如果消息成功放置到消息隊列則返回true,否則返回false。

        3.3Handler類

        發(fā)送消息:所使用的類為Handler類,方法為publicbooleansendMessage(Messagemsg),其中,msg是消息對象。Message類型的消息中包含了一個int類型的成員對象what,利用what可以區(qū)分不同的消息類型。子線程將消息發(fā)送給主線程,主線程收到消息之后,會根據傳過來的消息信號的不同做不同的動作。如果消息號為STOP,則子線程結束消息的傳送,如果消息號為CONTINUE,則繼續(xù)傳送消息。當子線程的狀態(tài)發(fā)生變化,則在子線程中發(fā)出Message,通知更新UI。

        接收處理消息:使用的是Handler類,方法為publicvoidhan

        dleMessage(Messagemsg),通過判斷msg.what可以區(qū)分不同的消息類型。根據不同的消息類型,主UI線程會產生不同的動作來響應子線程。

        4子線程與主線程之間通信的實例

        該程序的界面如圖3所示,界面中存在一個水平進度條和一個大環(huán)形進度條,以及一個TextView來顯示“界面加載中。。。”。運行中:水平滾動條每1秒前進一格,當進度條的進度達到100%時,TextView顯示“頁面加載完畢”。

        分析:要完成這樣的任務,需要讓程序循環(huán)性地休眠1s后,更新水平進度條。但是如果讓主程序休眠,會導致界面假死狀態(tài),造成用戶使用感受的下降,如何解決?就用到了上面所提到的線程。實現過程代碼如下圖4所示。

        5需要改善的幾個問題

        (1)設置線程的中斷標記,有效地控制線程的進度。在Eclipse中創(chuàng)建Android項目,通過實現Runnable接口來創(chuàng)建線程、開啟線程、讓線程休眠指定的時間,除此之外,還可以中斷線程。當需要中斷指定線程時,可以使用Thread類提供的interrupt()方法來實現。使用interrupt()方法可以向指定的線程發(fā)送一個中斷請求,此時可以使用一個boolean型的標記變量來記錄該線程的中斷狀態(tài),并通過該標記變量來控制循環(huán)的執(zhí)行與停止。

        (2)子線程開啟消息循環(huán)。在Andorid中一個線程對應一個Looper對象,而一個Looper對象對應一個MessageQueue消息隊列,消息隊列里面用于存放消息。Looper對象用來為一個線程開啟一個消息循環(huán),用來操作消息隊列。默認情況下,系統(tǒng)自動為主線程開啟消息循環(huán),新建子線程中則需要手動開啟,否則會拋出異常。

        6結語

        Android的應用程序的多線程編程為我們充分利用系統(tǒng)資源提供了便利,同時也為設計復雜UI和耗時操作提供了途徑,提升了手機用戶的使用體驗。在子線程與UI主線程通信過程中,用到了try{}catch{Exceptione}{}語句,這個語法是代碼異常處理的,如果沒有try的話,出現異常會導致程序崩潰。而try則可以保證程序的正常運行下去,并且輸出為什么出錯,對程序的維護有很大的幫助。

        另外在主線程上應該避免下列操作:與網絡相關的操作;需要對文件系統(tǒng)進行讀寫操作的任務;任何種類的繁重事務處理(如圖片或視頻修改);在等待某個事務完成時會阻礙線程執(zhí)行的任務等等。因此,作為一般規(guī)律,如果不涉及對用戶界面的設置或修改,就不要放在主線程上。

        參考文獻

        [1]余永佳,趙佩華,等.Android應用開發(fā)基礎[M].北京:機械工業(yè)出版社,2014.

        [2]蓋索林.Android開發(fā)入門指南(第二版)[M].北京:人民郵電出版社,2013.

      【Android環(huán)境下主UI線程與子線程通信機制研究論文】相關文章:

      論文:Linux進程和線程的基礎與管理08-18

      在Windows2000下用多線程實現1394串行總線通信10-02

      單片機系統(tǒng)中的多任務多線程機制的實現09-18

      多線程技術在邊緣檢測方面的應用10-06

      PPLive通信機制與流量識別研究08-20

      船舶物聯(lián)網遠程數據通信機制研究論文07-16

      全媒體環(huán)境下新聞語言研究論文07-01

      基于AMF的Android數據通信論文10-29

      通信IPRAN通信技術傳輸研究論文08-31

      能電網環(huán)境下的電力通信技術探析論文09-16

      主站蜘蛛池模板: 日本不卡一区二区高清中文| 日韩av在线不卡免费| 国产a视频一区二区三区| 亚欧乱色束缚一区二区三区| 久9热免费精品视频在线观看| 国产偷闻隔壁人妻内裤av| 蜜桃视频在线观看网站免费| 日韩av在线不卡免费| 亚洲乱精品中文字字幕| 人妻少妇中文字幕久久69堂| 亚洲国产精品夜男人天堂 | 太湖县| 亚洲无码视频一区:| 日韩肥熟妇无码一区二区三区| 在线视频一区二区亚洲| 在线观看一区二区女同| 国产免费激情小视频在线观看| www久久久888| 亚洲精品AⅤ无码精品丝袜无码| 双辽市| 亚洲AV专区一专区二专区三| 国产成人自拍小视频在线| 龙陵县| 免费国产在线精品三区| 国产免费三级三级三级| 国产女主播福利一区在线观看| 欧美综合区自拍亚洲综合| 国产视频在线一区二区三区四区| 蜜桃成人午夜激情网站| 伊人色综合九久久天天蜜桃| AV无码专区亚洲AVL在线观看| 香蕉久久夜色精品国产| 国产最新视频在线不卡| 国产中文字幕乱码在线| 亚洲国产另类久久久精品不卡| 国产精品久久久久亚洲| 武定县| 盖州市| 少妇高潮无码自拍| 高潮社区51视频在线观看| 临猗县|