Android單執行緒模式的理解

來源:互聯網
上載者:User

當一個Android程式啟動時,Android系統會同時啟動一個對應的主線程(Main Thread)。

由於這個主線程(Main Thread)主要的任務就是對UI相關的事件進行處理(例如顯示文本,處理點擊事件,顯示圖片等),系統對每一個組件的調用都是從主線程中分發出去的,所以又常被稱為UI線程。

IMP,Android單執行緒模式的核心原則就是:只能在UI線程(Main Thread)中對UI進行處理。

為了提高Performance,Android對UI處理的相關method都不是synchronized,所以當你試圖用其他線程來對UI進行操作時,會拋出如下異常:

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.


當然,這並非鼓勵我們將一切操作都放在UI線程當中進行。

有些十分費時但對UI更新影響很小的操作(如網路操作,資料庫操作等),若一起放在UI線程當中去進行的話,會導致UI Performance十分poor,對的,非常非常poor,甚至彈出ANR(Application Not Responding)視窗,這無疑對使用者是十分不友好的。

Ps:據我所知,Android SDK在4.0版本之後就不支援在Main Thread中直接進行網路相關操作,除非你厚顏無恥地在主線程中加上如下代碼:

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath().build());



因此,Android單執行緒模式的原則總結起來大致有兩點:

1.只能在UI線程(Main Thread)中對UI進行處理,不要在UI線程之外訪問Android UI toolkit

2.不要用費時的操作阻塞UI線程


關於如何處理好Android程式中的多線程,可以參考Android官方training:

Sending Operations to Multiple Threads.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.