解決您的其他問題:
你說「在Android中,我們有處理程序#後(可運行)方法從另一個張貼一些代碼,主線程」
這是不完全正確。如果線程B被初始化爲Looper
,並且線程A對目標線程B具有對Handler
的引用,您可以從任何線程A向任何線程B發佈一些代碼。
當您需要在UI線程上做一些事情,因爲UI線程已經有Looper
,你可以從幾乎任何地方檢索它。靜態方法Looper.getMainLooper
是爲主線程獲取Looper
的一種方法。如果使用此Looper
初始化Handler
,則可以發佈Runnable
或發送Message
(但如果發佈Runnable
,它也會被包裝爲Message
),並且它將在UI線程上執行。
Looper
,作爲名稱提示,基本上運行一個線程的非終止循環。 Looper
有一個關聯的MessageQueue
它不斷地檢查新的Messages.
通過Handler
初始化與Looper
你可以排隊Messages
在這個線程。 Messages
按順序處理,具體取決於Message
的when
字段。
這是一個基本的實現彎針線的:
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}
我建議你閱讀每棵G.B.的第5章Android Concurrency。它會讓你對Looper/Handler框架有一個全面的瞭解。在閱讀時瀏覽源代碼也很棒,它非常簡單且不言自明。
請張貼你想要做的更具體的例子。 –
GV,不,我不做Android編程,但是我做了很多Swing編碼,包括使用後臺線程。 –
@HovercraftFullOfEels你使用Android嗎?有一個類Handler。用法很簡單:新的Hanldler(Looper.getMainLooper())。post(new Runnable(){void run(){}});不管什麼線程現在是最新的,run()方法只會在MainThread中調用。 –