Android線程---UI線程和非UI線程之間通信

當(dāng)主線程sendMessage后,子線程便會調(diào)用handleMessage來獲取你所發(fā)送的Message。我的主線程向子線程發(fā)送消息時攜帶了數(shù)據(jù),子線程根據(jù)主線程發(fā)送來的數(shù)據(jù)進行數(shù)據(jù)庫查詢,并將查詢后的結(jié)果返回給該主線程:

1public class UpdataPeople extends Activity {

2

3EditText updata_name;

4EditText updata_phone;

5EditText updata_address;

6Button updata_quxiao;

7Button updata_baocun;

8

9String name;

10String phone;

11

12//創(chuàng)建一個子線程對象

13UpdataThread updataThread ;

14

15//定義一個全局變量,該Handler在主線程中重寫HandleMessage酒繁。

16//若不定義成為全局變量,則在子線程中無發(fā)用到該Handler

17private Handler mainHandler = null;

18

19//創(chuàng)建一個非UI線程

20class UpdataThread extends Thread {

21

22public Handler mhandler;

23

24public void run() {

25Looper.prepare();

26mhandler = new Handler() {

27

28//定義處理消息的方法

29@Override

30public voidhandleMessage(Message msg) {

31//---這里面做一些耗時操作

32if (msg.what == 0x123) {

33//獲取msg所攜帶的數(shù)據(jù)

34Bundle bundle =msg.getData();

35if (bundle != null) {

36String name =bundle.getString("name");

37String phone =bundle.getString("phone");

38Toast.makeText(getApplication(), "傳值成功" +name + phone, Toast.LENGTH_LONG).show();

39} else {

40name = "";

41phone = "";

42}

43//創(chuàng)建并連接數(shù)據(jù)庫控妻,若該數(shù)據(jù)庫已經(jīng)存在州袒,則打開該數(shù)據(jù)庫

44CreateDatabaseHelpercdh = new CreateDatabaseHelper(getApplication(), "myPeople.db3", 1);

45//使用游標(biāo)查詢數(shù)據(jù)庫,并返回結(jié)果集

46Cursor cursor =cdh.getReadableDatabase().rawQuery("select * from people where name = ?and phone = ?", new String[]{name, phone});

47//創(chuàng)建一個Bundle存儲查詢出來的結(jié)果

48Bundle dataAll = newBundle();

49//遍歷cursor饼暑,并將結(jié)果賦值給Bundle

50while(cursor.moveToNext()) {

51dataAll.putString("name", cursor.getString(1));

52dataAll.putString("phone", cursor.getString(2));

53dataAll.putString("address",cursor.getString(3));

54}

55//↓↓↓↓↓↓↓這一塊便是子線程將查詢的結(jié)果返回給主線程↓↓↓↓↓↓↓

56//創(chuàng)建Message

57Message msg_main = newMessage();

58msg_main.what = 0x456;

59//為Message添加數(shù)據(jù)

60msg_main.setData(dataAll);

61//向主線程發(fā)送消息

62mainHandler.sendMessage(msg_main);

63

64}

65}

66};

67Looper.loop();

68}

69}

70

71@Override

72protected void onCreate(BundlesavedInstanceState) {

73super.onCreate(savedInstanceState);

74//實例化Thread

75updataThread = new UpdataThread();

76//啟動新線程

77updataThread.start();

78setContentView(R.layout.updatapeople);

79//獲取布局文件里的控件

80updata_name = (EditText)findViewById(R.id.updata_name);

81updata_phone = (EditText)findViewById(R.id.updata_phone);

82updata_address = (EditText)findViewById(R.id.updata_address);

83updata_quxiao = (Button)findViewById(R.id.updata_quxiao);

84updata_baocun = (Button)findViewById(R.id.updata_baocun);

85

86//獲取啟動該Activity的Intent

87Intent intent = getIntent();

88//取出Intent所攜帶的數(shù)據(jù)包

89Bundle datas = intent.getExtras();

90//取出包中所攜帶的各種數(shù)據(jù)

91if (datas != null) {

92name =datas.getString("name");

93phone =datas.getString("phone");

94} else {

95name = "空";

96phone = "空";

97}

98 //↓↓↓↓↓↓↓這一塊便是主線程向子線程發(fā)送消息↓↓↓↓↓↓↓↓

99//創(chuàng)建消息

100Message msg = new Message();

101//為msg標(biāo)記一下(類似與--key--)

102msg.what = 0x123;

103//創(chuàng)建一個Bundle,并存放數(shù)據(jù)

104Bundle bundle = new Bundle();

105bundle.putString("name", name);

106bundle.putString("phone", phone);

107//將數(shù)據(jù)添加到msg

108msg.setData(bundle);

109//向新線程發(fā)送消息

110updataThread.mhandler.sendMessage(msg);

111

112//接受子線程返回的消息和子線程那邊的用法一樣

113mainHandler = new Handler() {

114@Override

115public void handleMessage(Message msg_main) {

116if (msg_main.what == 0x456){

117//更新UI(因為在UI線程中可以進行UI的更新稳析。。弓叛。)

118updata_name.setText(msg_main.getData().getString("name"));

119}

120}

121};

另外建議APP開發(fā)完可以做一個全面的檢測:www.ineice.com


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末彰居,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撰筷,更是在濱河造成了極大的恐慌陈惰,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毕籽,死亡現(xiàn)場離奇詭異抬闯,居然都是意外死亡井辆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進店門溶握,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杯缺,“玉大人,你說我怎么就攤上這事睡榆∑妓粒” “怎么了?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵胀屿,是天一觀的道長塘揣。 經(jīng)常有香客問我,道長宿崭,這世上最難降的妖魔是什么亲铡? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮葡兑,結(jié)果婚禮上奖蔓,老公的妹妹穿的比我還像新娘。我一直安慰自己铁孵,他們只是感情好锭硼,可當(dāng)我...
    茶點故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜕劝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪轰异。 梳的紋絲不亂的頭發(fā)上岖沛,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天,我揣著相機與錄音搭独,去河邊找鬼婴削。 笑死,一個胖子當(dāng)著我的面吹牛牙肝,可吹牛的內(nèi)容都是我干的唉俗。 我是一名探鬼主播,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼配椭,長吁一口氣:“原來是場噩夢啊……” “哼虫溜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起股缸,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤衡楞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后敦姻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘾境,經(jīng)...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡歧杏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了迷守。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片犬绒。...
    茶點故事閱讀 38,711評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖兑凿,靈堂內(nèi)的尸體忽然破棺而出懂更,到底是詐尸還是另有隱情,我是刑警寧澤急膀,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布沮协,位于F島的核電站,受9級特大地震影響卓嫂,放射性物質(zhì)發(fā)生泄漏慷暂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一晨雳、第九天 我趴在偏房一處隱蔽的房頂上張望行瑞。 院中可真熱鬧,春花似錦餐禁、人聲如沸血久。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氧吐。三九已至,卻和暖如春末盔,著一層夾襖步出監(jiān)牢的瞬間筑舅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工陨舱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翠拣,地道東北人。 一個月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓游盲,卻偏偏與公主長得像误墓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子益缎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,595評論 2 350

推薦閱讀更多精彩內(nèi)容