為了解決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...