2016-09-28 166 views
0
Handler mainHandler = new Handler(MainActivity.context.getMainLooper()); 
mainHandler.post(new Runnable() { 
    @Override 
    public void run() { 

     // .. some code     
    } 
}); 

通常我從工作線程開始Runnable,但它可能發生,它是從主線程調用的。你認爲它有什麼負面影響?從主線程發佈的主線程啓動線程?

回答

4

你沒有啓動線程,你將一個Handler附加到主Looper併發送一個命令來運行。它將具有與從另一個線程調用時完全相同的效果。

+0

當正常的'方法調用'被執行時,是否有任何'延遲'發佈'Runnable'這樣的從主到主比較? –

+1

@János是的,這些runnables被添加到隊列中,並且在之前的任何事情之後被執行 – Kiskae

-1

處理程序在需要發送消息到另一個線程時使用。 如果你在主線程中創建一個Handler,那麼你可以從後臺線程向主線程發送消息。 更好地使新的內部靜態類擴展Hadnler,將WeakReference var聲明爲Activity。

0
  1. 處理程序會將runnable發佈到它附加的活套。 Runnable只是一個代碼段,它將在循環運行的線程上調用。在這種情況下,這裏的活套是MainLooper,並且可以在MainThread上調用runnable。

無論何時你想更新你的UI組件,你應該將你的runnable發佈到主線程。

  1. 我覺得在MainActivity中聲明一個像這個「MainActivity.context」這樣的靜態字段是不夠的。
+0

「MainActivity.context」有什麼問題?我總是懷疑爲什麼上下文總是需要調用不同的方法。在iOS中不存在類似的動物。所以我只需要在任何地方使用''MainActivity.context'''。 –

+0

MainActivity.context引用了什麼?你的應用程序或MainActivity? – Bennyhuo

+0

'context = getApplicationContext();' –