Android通訊 Android執行緒間通訊

2021-07-26 15:05:35 字數 1764 閱讀 9463

android程式中,執行緒分為主線程(ui thread)和工作執行緒(work thread)。

我們要遵循單執行緒模型原則:安卓ui的操作執行緒不安全,安卓ui的操作必須在主線程進行。

1、多執行緒任務開發可以通過以下幾個方式實現:

handler、

asynctask。

詳見:2、如果子執行緒的資料想通知到

ui執行緒中,實現方法:

activity.runonuithread(runnable)

runonuithread(new runnable()

});

view.post(runnable)或者new handler().post()

view.post本質上是非同步訊息處理機制。相對於新建handler進行處理更加便捷,參考一下原始碼

public boolean post(runnable action)     

// assume that post will succeed later

viewrootimpl.getrunqueue().post(action);

return true;

}

post方法相當於把這個事件新增到了ui 事件佇列尾部,保證了在layout結束以後才執行。

view.postdelayed(runnable, long)或者

new handler().postdelayed(runnable, long)

3.管道流(不常用),管道為兩個執行緒建立乙個單向的通道。生產者pipedwriter負責寫資料,消費者pipedreader負責讀取資料。感覺很繁瑣,不想用。

public class pipeexampleactivity extends activity  catch (ioexception e) 

setcontentview(r.layout.activity_pipe);

edittext = (edittext) findviewbyid(r.id.edit_text);

edittext.addtextchangedlistener(new textwatcher()

@override

public void ontextchanged(charsequence charsequence, int start, int before, int count)

} catch (ioexception e)

}@override

public void aftertextchanged(editable editable)

});workerthread = new thread(new texthandlertask(r));

workerthread.start();

} @override

protected void ondestroy() catch (ioexception e)

} private static class texthandlertask implements runnable

@override

public void run()

} catch (ioexception e)

}} }

}

synchronized(this) 

notify();

}

3、4請參考:

Android 即使通訊

手機上基於位置的社交應用越來越多了,以找人為目的以不能滿足需求,找到人不說話 不能說話 倒還不如不找。所有,即使通訊也在日益火爆著。伺服器端採用openfire 客戶端 用smack 下面開始,只做客戶端,首先建立連線,就和我們建立dbhelper 連線類差不多。public static fina...

android 串列埠通訊

因為工作需要,從未接觸過串列埠的我被老闆欽定了.查了幾天資料之後,終於搞出了乙份能用的demo 是別人寫好的,對android serialport api 的乙個依賴.接入這個依賴之後,照著提示去做基本就可以搞定了.需要注意的是,如果你接收到的資料不完整,可能是你使用的串列埠被占用了 我自己開發的...

android串列埠通訊

串列埠通訊 serial communications 的概念非常簡單,串列埠按位 bit 傳送和接收位元組。串列埠用於ascii碼字元的傳輸。通訊使用3根線完成,分別是地線 gnd 傳送 tx 接收 rx 由於串列埠通訊是非同步的,埠能夠在一根線上傳送資料同時在另一根線上接收資料。其他線用於握手,...