讓子執行緒中更新UI變成可能!

2021-07-23 00:27:01 字數 1516 閱讀 8362

大家聽到的往往都是子執行緒中不能更新ui,尤其是培訓班出來的學生,聽慣了老師說「子執行緒中不能更新ui啊」,這樣的老師我只能說不負責任,今天我要講的是在子執行緒中更新ui的幾種方法

方法一:用handler

1、主線程中定義handler:

handler mhandler = new handler() 

}};

2、子執行緒發訊息,通知handler完成ui更新:

private

void

updateweather()

}).start();

}

方法一的handler物件必須定義在主線程中,如是多個類直接互相呼叫,就不是很方便,需要傳遞content物件或通過介面呼叫;

方法二:用runonuithread更新

new thread() 

});}

}.start();

如果在非上下文類中(activity),可以通過傳遞上下文實現呼叫;

ctivity activity = (activity) imageview.getcontext();

activity.runonuithread(new runnable()

});

這種方法使用比較靈活,但如果thread定義在其他地方,需要傳遞activity物件;

方法三:view.post(runnable r)

imageview.post(new runnable()

});

這種方法更簡單,但需要傳遞要更新的view過去;

方法四:使用asynctask

//ui執行緒中執行  

new downloadimagetask().execute( "www.91dota.com" );

private

class

downloadimagetask

extends

asynctask

protected

void

onpostexecute( string result )

}

大家對於這一種在子執行緒中更新ui的操作可能比較熟悉。。

方法五:使用looper類

什麼是looper?

android中的looper類,是用來封裝訊息迴圈和訊息佇列的乙個類,用於在android執行緒中進行訊息處理。

如何在子執行緒中更新ui

class

looperthread

extends

thread

};

looper.loop();

}

如果執行緒中使用looper.prepare()和looper.loop()建立了訊息佇列就可以讓訊息處理在該執行緒中完成

子執行緒更新UI

一般在winform c s程式中經常會在子執行緒中更新控制項的情況,桌面程式ui執行緒是主線程,當試圖從子執行緒直接修改控制項屬性時會出現 從不是建立控制項的執行緒訪問它 的異常提示。跨執行緒更新ui控制項的常用方法有兩種 1.使用控制項自身的invoke begininvoke方法 2.使用sy...

Qt子執行緒如何更新UI?

和其他語言類似,不能直接在子執行緒更新ui,可以通過signal slot機制在ui執行緒進行更新。signal slot機制可以在不同物件,不同執行緒之間進行通訊。例子 include mainwindow.h include include class mythread public qthre...

android 子執行緒更新UI例項

package com.example.test0207 handler import android.os.bundle import android.os.handler import android.os.message import android.view.menu import andr...