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 由於串列埠通訊是非同步的,埠能夠在一根線上傳送資料同時在另一根線上接收資料。其他線用於握手,...