介面元件和執行緒的互動

2021-05-24 13:09:12 字數 1140 閱讀 3246

為了解決anr問題,使用新建執行緒的方式。

但新建的執行緒無法訪問到介面元件。檢視元件只對建立檢視結構層次的執行緒開放。而對新建的執行緒是close的。

解決這個問題可以通過android的訊息佇列機制。即通過執行緒的訊息佇列處理器(handler),外部執行緒向主線程訊息傳送訊息,主線程在收

到訊息後,再通過訊息的「指示」來控介面。

1)// 初始化介面執行緒訊息處理器

private final handler mhandler = new handler() {

@override

public void handlemessage(message msg) {

// todo auto-generated method stub

super.handlemessage(msg);

// 獲取訊息資料

bundle bundle = msg.getdata();

string sendstr = bundle.getcharsequence("sender").tostring();

string msgstr = bundle.getstring("msg");

// 輸出訊息文字框

2)將主線程訊息處理器傳給新建的執行緒:

private void startserviece()

mserverthread = new serverthread(mhandler);

mserverthread.start();

3)在新建的執行緒中通過主線程訊息處理器給主線程傳送訊息。

public void showresponse(handler handler, string sender, string data)

//建立訊息包

bundle bundle = new bundle();

//設定訊息項

bundle.putcharsequence("sender",sender);

bundle.putstring("msg", data);

//建立訊息實體

message msg = new message();

//設定訊息資料

msg.setdata(bundle);

handler.sendmessage(msg);

android多執行緒介面互動

首先runonuithread是activity內部的方法,在運用的時候最好指明當前環境變 context new thread new runnable start new thread new runnable start 上面兩個其實原理一樣,runonuithread這個會呼叫父類中的 pu...

介面和執行緒互動之簡單使用說明

在進行多執行緒設計過程中,最重要的就是實現執行緒同步和執行緒介面互動。如果想實現執行緒同步,可以通過lock鎖來進行 而如果要想執行緒和介面互動,則需要利用委託來進行,下面請看 using system using system.windows.forms using system.threadin...

多執行緒與介面元件通訊

思路 在子執行緒中使用postevent 傳送自定義的事件類物件,在主線程中更改介面狀態 自定義事件類 ifndef stringevent h define stringevent h include include class stringevent public qevent endif st...