您現在的位置是:電腦技術吧?>? 組裝維修 ??>??多線程有什么用,多線程??>??正文詳情

多線程有什么用,多線程

完曜曦2019-12-11 14:02:47 人圍觀
簡介多線程死鎖進程和線程一般來說,Android會打開一個進程供應用程序執行。應用程序中的所有組件都通過單獨的線程執行,并且所有線程共享應用程序進程的資源。當應用程序啟動時,多

進程與線程  一般來說,Android中為一個應用程序開啟一個進程進行執行,在這個應用程序中的所有組件,通過單獨的線程進行執行,而其中所有的線程,共享該應用程序進程的資源。

當一個應用程序啟動的時候,Android系統啟動一個新的Linux應用程序的進程和一個執行線程。

默認情況下,一個應用程序運行中的所有組件運行在相同的進程和線程中,這里的線程一般稱為主線程。

如果一個應用程序的組件開始的時候,已經存在一個進程,那么應用程序會在與它相同的執行線程中開始這個組件。

進程  默認情況下,同一應用程序下的所有組件運行在同一進程中,大多數應用程序不應該改變這個。

然而,如果需要控制那個進程屬于那個組件,可以在AndroidManifest.xml文件中進行配置。

一般來說,組件元素:activity、service、receiver、provider均支持一個android:process屬性,可以設置這個屬性讓不同的組件單獨運行在自己的進程中,也可以使用這個屬性使不同的應用程序組件運行在相同的進程中,并共享相同的Linux用戶ID和賦予同樣的證書。

  Tips:application元素也支持android:process屬性,用于設置所有的組件。

  Android在內存較低的情況下,會關閉一些優先級較低的進程以增大內存運行更重要的進程,而在這個進程中的所有線程,也會被同時銷毀。

在內存足夠的情況下,Android系統會視圖盡可能保持應用程序進程,以達到下次的運行的快速啟動,但最終需要移除舊的進程,回收內存用于新的或更重要的進程。

通過進程的優先級來判斷是否被回收,一般會回收優先級低的進程,以給優先級高的進程騰出資源。

  下面是五類Android進程,他們的優先級順序排列:

    Foreground process:前臺進程。

    Visible prcess:可見進程。

    Service process:服務進程。

    Background process:后臺進程。

    Empty process:空進程。

  Tips:一個進程的優先級是可以變化的。

線程  當應用程序啟動時,系統會創建一個執行線程在這個應用程序的的進程中,一般被稱為主線程。

這個線程是非常重要的,因為它負責把事件分發給響應的用戶組件,包括繪制事件等,因此主線程又被稱為UI線程。

系統并不會為每個組件創建一個單獨的線程,而是在UI線程中,完成這些組件的初始化的,因此系統回調方法是運行在UI線程中,如click事件。

  當程序執行比較復雜的工作來應對用戶交互的時候,哪怕應用程序被正確的執行了,單線程模式也可能會導致運行性能很低下。

舉例來說,如果一切的應用功能都發生在UI線程中,當執行耗時操作的時候,如訪問網絡或查詢數據,均會阻塞UI先,將導致其他的事件不被分發到事件隊列中,包括屏幕繪制事件。

導致從用戶的角度來看,應用程序死掉了。

而在Android系統中,當UI線程被阻塞超過幾秒鐘(大約是5秒)的時候,會彈出應用程序沒有響應的對話框,造成用戶體驗差,可能會迫使用戶決定退出你的應用或者干脆直接卸載它。

  此外,Android的UI ToolKit包下的所有組件都不是線程安全的,所以,不能在一個單獨的工作線程中操作這些UI組件,必須在UI線程中操作。

因此,對于單線程模型,Android有兩個規則:

    不能阻塞UI線程 不能在工作線程中訪問Android UI ToolKit包下的組件。

  對于耗時的操作,應該放在單獨的線程中。

例如:下面通過一個Demo監聽按鈕點擊事件,下載一個圖片,從單獨的線程中,并顯示在一個ImageView中。

1 btnError2.setOnClickListener(new View.OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 // 增加一個線程訪問網絡 5 new Thread(new Runnable() { 6 @Override 7 public void run() { 8 // 獲取地址下的圖片 9 Bitmap btm=loadImageFromNetwork(http://ww4.sinaimg.cn/bmiddle/786013a5jw1e7akotp4bcj20c80i3aao.jpg);10 imageView1.setImageBitmap(btm); 11 }12 }).start();13 14 }15 });  起初,這似乎是合理的,啟動了一個新線程來訪問網絡,但是它違反了規則二,不能在Android UI主線程之外修改UI組件,而在click中new Thread的是一個工作線程,在工作線程中無法操作UI組件,以上Demo會報錯。

  要修正上面的錯誤,Android提供幾種方法可以從其他線程中訪問UI線程: Activity.runOnUiThread(Runnable):運行在指定的UI線程上,如果當前線程是UI線程,那么立即執行,如果當前線程不是UI線程,則發布到UI線程的事件隊列中。

View.post(Runnable):將事件發布到UI線程中,立即被執行。

View.postDelayed(Runnanle,long):將事件發布到UI線程中,延遲被執行,延遲數為傳遞的long參數。

  下面通過兩個Dem來通過上面介紹的方法來操作UI組件:  Activity.runOnUiThread: 1 btnRunOnUiThread.setOnClickListener(new View.OnClickListener() { 2 3 @Override 4 public void onClick(View v) { 5 new Thread(new Runnable() { 6 7 @Override 8 public void run() { 9 final Bitmap btm=loadImageFromNetwork(http://ww4.sinaimg.cn/bmiddle/786013a5jw1e7akotp4bcj20c80i3aao.jpg);10 MainActivity.this.runOnUiThread(new Runnable() { 11 @Override12 public void run() {13 imageView1.setImageBitmap(btm); 14 }15 });16 }17 }).start();18 }19 });  效果演示:

  View.post 1 btnPost.setOnClickListener(new View.OnClickListener() { 2 3 @Override 4 public void onClick(View v) { 5 new Thread(new Runnable() { 6 7 @Override 8 public void run() { 9 final Bitmap btm=loadImageFromNetwork(http://ww1.sinaimg.cn/bmiddle/88ff29e8jw1e7pjnpfxbrj20dp0a90tb.jpg);10 imageView1.post(new Runnable() {11 12 @Override13 public void run() {14 // TODO Auto-generated method stub15 imageView1.setImageBitmap(btm);16 }17 });18 }19 }).start(); 20 }21 });  效果演示:

版權聲明:本文由 完曜曦 整理編輯。

原標題:什么是線程,線程有什么用

轉載注明出處:http://www.dn9ww09s.icu/assemble/15329.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • 桌面應用程序開發,應用程序是什么

    桌面應用程序開發,應用程序是什么 相關圖片如何開發程序顧名思義,所謂手機程序就是可以安裝在手機上的程序,以改進原有系統的缺點和個性化。隨著科學技術的發展,手機的功能越來越強大。它不像以前那么簡單和僵硬,但...

  • 您未被授權查看該網頁,微信取消網頁登錄授權

    您未被授權查看該網頁,微信取消網頁登錄授權 相關圖片微信不能登錄網頁版怎么解決Android授權訪問該網頁。使用WebView顯示由OAuth version 2.apimplicitgrant授權的頁面。不建議對移動終端使用授權碼授權:qq授權管理中心網頁...

  • 如何新建文件夾并保存,新建文件夾怎么建

    如何新建文件夾并保存,新建文件夾怎么建 相關圖片怎么新建文件夾放照片現在我們差不多完成了,讓我們保存新的查詢。在主菜單上,單擊“文件”菜單中的“保存”命令。如果此查詢是第一次存儲的,屏幕上將彈出一個對話框,詢問...

  • 技能競賽小結,培訓小結

    技能競賽小結,培訓小結 相關圖片轉正個人小結本文主要介紹Android開發中一些耗時的操作總結。根據實際開發經驗,總結出六種耗時的編程操作。請注意,您可以參考在Android軟件開發過程中經常遇到的耗時操實訓總結...

  • 數據庫存取方法,數據庫的最小存取單位

    數據庫存取方法,數據庫的最小存取單位 相關圖片數據庫中存儲的是什么一、實現思路:當用戶添加或修改圖片時,控制CommonDialog的showopen對話框,將通用對話框的文件名記錄到變量a中,然后使用app.path查找特定文件系統中最小的數據存...

  • 客戶端編程,猿編程客戶端

    客戶端編程,猿編程客戶端 相關圖片手機編程本文主要針對MVC框架的一些相關使用問題,介紹了JavaScript客戶端應用程序編程的一些建議。作為參考,您可能會注意到,最近一段時間,越來越多的web應用程編程網站...

  • SQL 存儲過程,SQL查看存儲過程

    SQL 存儲過程,SQL查看存儲過程 相關圖片sql建立存儲過程SQL Server中alter過程和create過程的區別:1。AutoPro期望找到現有的存儲過程,而CREATE不是。2。Alter proc保持sql 調用存儲過程...

  • 怎么設置防火墻,防火墻設置在哪

    怎么設置防火墻,防火墻設置在哪 相關圖片系統防火墻在哪里設置甲骨文和防火墻設置訪問windows甲骨文數據庫后的防火墻,僅僅打開固定的TCP端口方式是不夠的。這個問題的根本原因是windows-Oracle數據庫的BT設關閉防火墻...

  • 標識列的使用,標識列是什么

    標識列的使用,標識列是什么 相關圖片無法更新標識列現在讓我們看一個表:考慮一下如何在數據庫SQL Server中輕松地向該表添加數據?很容易發現,在ID字段中添加這一列數據是規則的,并且可以遵循。這是一個等比自一個...

  • oracle10gclient,Oracle10g

    oracle10gclient,Oracle10g 相關圖片oracle10g安裝包Oracle 10g RAC[恢復OCR]-查詢OCR狀態:×/Oracle/product/10g/CRS/bin/ocrcheck prot-601:初始化查看oracle10g版本...

熱評文章

  • exit,exit 0

    exit,exit 0 相關圖片King exit首先,一項活動有一個生命周期。一次創建,一次啟動,一次恢復,一次暫停,一次停止,一次存儲。。。Finish是活動的類,僅用于活動。調用finish()時,僅brexit...

  • 添加數據,數據庫怎么添加數據

    添加數據,數據庫怎么添加數據 相關圖片添加首先,我們在表中輸入幾個數字。當我們在空表中輸入數據時,只能輸入第一行。首先,將鼠標移到表上的“公司名稱”字段和第一行相交處的正方形。單擊鼠標左鍵,方塊中會出...

  • net好還是JAVA好,網站開發用JAVA還是net

    net好還是JAVA好,網站開發用JAVA還是net 相關圖片JAVA序列化和反序列化我們現在的大部分理解。Net可以總結如下:首先,它是Java平臺的一個克隆(注意這個平臺,不要把它和Java語言混淆)。后來,它逐漸演變,并有自己的特點。因為...

  • 倒計時效果,倒計時

    倒計時效果,倒計時 相關圖片倒計時網頁1. Import java.util.timer; import java.util.timertask; import android.annotation倒計時網...

  • ajax用戶名是否重復,ajax校驗用戶名

    ajax用戶名是否重復,ajax校驗用戶名 相關圖片ajax實現判斷用戶名是否存在! DOCTYPE HTML public-//W3C//DTD HTML 4.0 transitional//enhtmlheadtitle ASP Ajax用ajax做登錄...

  • asp開源代碼,html代碼

    asp開源代碼,html代碼 相關圖片怎樣將asp源代碼Size appealnum, appealcountappealnum = 10 'same ip60 secondsasp采集器...

  • 異常處理培訓收獲,異常處理培訓心得

    異常處理培訓收獲,異常處理培訓心得 相關圖片制程異常處理培訓心得要處理JSP程序可能生成的異常,您可以從多個角度進行處理:特定代碼、特定文件和錯誤類型。如果您特定于您的代碼,則可以使用標準標記庫中核心標記庫中的...

  • 本地環境怎么樣搭建,搭建環境

    本地環境怎么樣搭建,搭建環境 相關圖片php服務器環境搭建所謂Wamp環境就是windows Apache MySQL PHP開發操作環境,這是我們學習PHP開發最基本的一步。雖然現在集成開發環境已經邁出了一大步,但是怎么搭建php的環境...

  • asp上傳文件,asp上傳文件教程

    asp上傳文件,asp上傳文件教程 相關圖片asp上傳文件md5Functions chkimg (IMG), dim returnValue, chkjpeg returnValue = true for next errasp上傳文件太慢...

  • 國際化培訓,國際化培訓作業

    國際化培訓,國際化培訓作業 相關圖片什么是國際化教育目標:掌握Java Web應用程序的國際化;掌握頁面信息中數字的格式;掌握頁面信息中日期和時間的格式。隨著全球經濟的國際化,許多公司的業務涉及多個國家和語言,...

關注微信

变脸官网查询