android進程與線程詳解二:線程

來源:互聯網
上載者:User
線程

當一個應用被啟動,系統建立一個執行線程,叫做"main"。這個線程是十分重要的,因為它主管向使用者介面控制項派發事件。其中包含繪圖事件。它也是你的應用與介面工具包(android.widget和
android.view包中的組件)互動的地方。於是main線程也被稱為介面線程。

系統不會為每個組件的執行個體分別建立線程。所有運行於一個進程的組件都在介面線程中被執行個體化,並且系統對每個組件的調用都在這個線程中派發。 結果,響應系統調用的方法(比如報告使用者動作的onKeyDown()或一個生命週期回調方法)永遠在介面線程中進程。

例如,當使用者觸控螢幕幕上的一個按鈕時,你的應用的介面線程把觸摸事件派發給控制項,然後控制項設定它的按下狀態再向事件隊列發出一個自己介面變得無效的請求,介面線程從隊列中取出這個請求並通知這個控制項重繪它自己。

當你的應用在響應使用者互動時需執行大量運算時,這種單線程的模式會帶來低效能,除非你能正確的最佳化你的程式。特別的,如果所有事情都在介面線程中發生,執行比如網路連接或資料庫請求這樣的耗時操作,將會阻止整個介面的響應。當線程被阻塞時,就不能派發事件了,包括繪圖事件。從使用者的角度看,程式反應太慢了。甚至更糟的是,如果介面線程被阻塞幾秒鐘(大5秒鐘吧),使用者就戶抱怨說程式沒反應了,使用者可能因而退出並刪掉你的應用。

此外,Andoid介面不是安全執行緒的。所以你絕不能在一個背景工作執行緒中操作你的介面—你只能在介面線程中管理的你的介面。所以,對於單線程模式有兩個簡單的規則:

1
不要阻塞介面線程

2不要在介面線程之外操作介面。

背景工作執行緒

由於上述的單線程模式,不要阻塞你的介面線程以使你的應用的介面保持響應是非常重要的,那麼如果你有不能很快完成的任務,你應把它們放在另一個線程中執行(後台線程或背景工作執行緒)。

例如,下面是的代碼是響應click事件,在另外一個線程中下載一個圖片並在一個ImageView中顯示它:

public void onClick(View v) {<br /> new Thread(new Runnable() {<br /> public void run() {<br /> Bitmap b = loadImageFromNetwork("http://example.com/image.png");<br /> mImageView.setImageBitmap(b);<br /> }<br /> }).start();<br />}
第一眼,這看起來能很好的工作,因為它建立了一個新線程來進行網路操作。然而它違反了第二條規則:不要在介面線程之外操作介面—它簡單的在背景工作執行緒中修改了ImageView。這會導至未定義的異常出現,並且難以調試追蹤。

為了能改正這個問題,Android提供了很多從其它線程來操作介面的方法。下面是可用的方法們:

1 Activity.runOnUiThread(Runnable)

2 View.post(Runnable)

3 View.postDelayed(Runnable,long)

例如,你可以用View.post(Runnable)來修正上面的問題:

public void onClick(View v) {<br /> new Thread(new Runnable() {<br /> public void run() {<br /> final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");<br /> mImageView.post(new Runnable() {<br /> public void run() {<br /> mImageView.setImageBitmap(bitmap);<br /> }<br /> });<br /> }<br /> }).start();<br />}
現在這個實現終於是安全執行緒的了:網路操作在另一個線程中並且ImageView
在介面線程中改變。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.