2012-02-24 43 views
18

我想要找出線程和處理程序之間的區別。創建一個新的處理程序是否會創建一個新的線程?當一個新的處理程序使用post()運行時,它是否創建了一個新的線程?請詳細解釋線程和處理程序有什麼區別

回答

20

線程是通用的處理任務,可以處理大部分事情,但他們無法做的一件事是更新UI。

另一方面,處理程序綁定到允許您與UI線程通信的線程(更新UI)。

因此,舉例來說,通過發佈到處理程序的消息(Runnable)顯示一個進程或更新進度條,但如果以線程的形式啓動此可運行的程序,則無法進行此操作。

使用處理程序,您還可以擁有MessageQueuing,調度和重複等功能。

我還沒有遇到一種情況,我需要在android中的線程。我主要使用AsyncTasks和Handlers的組合。

上述任務的處理程序。

AsyncTasks下載/數據的讀取和查詢等

你可以在這裏閱讀開發商的文章「Painless Threading」在Android的更多線程。

糾錯: 每個Handler實例都與單個線程和該線程的消息隊列相關聯。他們不是代表他們自己的線程。如here所述。

+3

處理程序不是線程 – Selvin 2012-02-24 19:07:27

+0

正確,已更正 – MahdeTo 2012-02-24 19:16:11

2

線程定義進程正在運行。就像你在android中有一個主要的(UI線程)。並且所有其他線程都在後臺運行(並行)。

處理程序是完全不同的,它就像啓動一個處理程序中定義的任務..

要清除出你的困惑,並執行Android的線程,您必須閱讀: http://android-developers.blogspot.com/2009/05/painless-threading.html

,我會建議AsyncTask,而不是在所有情況下都使用Thread。

0

我們爲什麼使用處理程序與線程:

當我們安裝在Android的應用程序則創建該應用程序調用主UI線程,該線程中運行的所有活動,通過Android的單線程模式線程規則我們無法直接訪問該活動內定義的另一個線程的UI元素(位圖,文本視圖等)。

因此,如果想要通過另一個線程訪問主UI線程元素,那麼我們將使用處理程序。

相關問題