亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

活用Android的Message Queue(3)

系統(tǒng) 1836 0

3.?? 由主線程發(fā)送消息給子線程 ( 續(xù) )

???? 上述范例里,是由子線程發(fā)送消息給主線程。本節(jié)將介紹如何從主線程 發(fā)送消息 給子線程。其方法是:當(dāng)子線程執(zhí)行 run() 函數(shù)時,就創(chuàng)建一個子線程的 Handler 對象。之后,當(dāng)主線程執(zhí)行 ac01 onClick() 函數(shù)時,就藉由此 Handler 對象引用而 push 消息給子線程。例如下述范例:

?

//----- Looper_04 范例 ?-----

public ? class ?ac01? extends ?Activity? implements ?OnClickListener {

???? private ? final ? int ? WC ?= LinearLayout.LayoutParams. WRAP_CONTENT ;

???? private ? final ? int ? FP ?= LinearLayout.LayoutParams. FILL_PARENT ;

???? public ?TextView? tv ;

???? private ?myThread? t ;

???? private ?Button? btn ,? btn2 ;

???? private ?Handler? h ;

???? private ?Context? ctx ;

???? public ? void ?onCreate(Bundle icicle) {

???????????? super .onCreate(icicle);

???????????? ctx ?=? this ;

????????????????LinearLayout layout =? new ?LinearLayout( this );

????????????????layout.setOrientation(LinearLayout. VERTICAL );

??????????????????????????????

???????????????? btn ?=? new ?Button( this );

???????????????? btn .setId(101);

???????????????? btn .setBackgroundResource(R.drawable. heart );

???????????????? btn .setText( "test looper" );

???????????????? btn .setOnClickListener( this );

????????????????LinearLayout.LayoutParams param =

???????????????????? new ?LinearLayout.LayoutParams(100,50);

????????????????param. topMargin ?= 10;

????????????????layout.addView( btn , param);

???????????????

???????????????? btn2 ?=? new ?Button( this );

???????????????? btn2 .setId(102);

???????????????? btn2 .setBackgroundResource(R.drawable. ok_blue );

???????????????? btn2 .setText( "exit" );

???????????????? btn2 .setOnClickListener( this );

????????????????layout.addView( btn2 , param);

???????????????

???????????????? tv ?=? new ?TextView( this );

???????????????? tv .setTextColor(Color. WHITE );

???????????????? tv .setText( "" );

????????????????LinearLayout.LayoutParams param2 =

??????????????????? new ?LinearLayout.LayoutParams( FP ,? WC );

????????????????param2. topMargin ?= 10;

????????????????layout.addView( tv , param2);

????????????????setContentView(layout);?

???????????????? //------------------------

???????????????? t ?=? new ?myThread();

????????????????? t .start();

??????????}

?????????? public ? void ?onClick(View v) {

???????? switch (v.getId()){

???????? case ?101:

?????????????String obj =? "mainThread" ;

?????????????Message m =? h .obtainMessage(1, 1, 1, obj);

????????????? h .sendMessage(m);

????????????? break ;

???????? case ?102:

???????????? h .getLooper().quit();

????????finish();

???????????? break ;

????????}

????}

//------------------------------------------------?????

public ? class ?EventHandler? extends ?Handler {

?????????? public ?EventHandler(Looper looper) {

?????????????????????? super (looper);

??????????}

??????????? @Override

?????????????? public ? void ?handleMessage(Message msg) {

?????????????????????((Activity) ctx ).setTitle((String)msg. obj );

????????????}

????????}

//------------------------------------------------?????

class ?myThread? extends ?Thread{

????? public ? void ?run() {

?????????Looper. prepare ();

????????? h ?=? new ?Handler(){

??????????????? public ? void ?handleMessage(Message msg) {

??????????????????EventHandler ha =? new

?????????????????????EventHandler(Looper. getMainLooper ());

????????????????????String obj = (String)msg. obj ?+? ", myThread" ;

?????????????????????Message m = ha.obtainMessage(1, 1, 1, obj);

?????????????????????ha.sendMessage(m);

?????????}

?????????};

?????????Looper. loop ();

??????}

??}

}

?

?

當(dāng)子線程執(zhí)行 run() 函數(shù)時,創(chuàng)建一個主線程的 EventHandler 對象,并且藉之而 push 消息給主線程了。就進(jìn)行了兩個線程之間的互相交換消息,也是兩個函數(shù)或?qū)ο箝g之交換消息。此程序輸出畫面為:

?

?

2

?

????? 上述范例定義了 Thread 的子類別。也可以將子線程包含到 Runnable 類別里,如下:

?

//----- Looper_04aa 范例 ?-----

public ? class ?ac01? extends ?Activity? implements ?OnClickListener {

???? private ? final ? int ? WC ?= LinearLayout.LayoutParams. WRAP_CONTENT ;

???? private ? final ? int ? FP ?= LinearLayout.LayoutParams. FILL_PARENT ;

???? public ?TextView? tv ;

???? private ?RR? r ;

???? private ?Button? btn ,? btn2 ;

???? private ?Handler? h ;

???? private ?Context? ctx ;

???? public ? void ?onCreate(Bundle icicle) {

???????????? super .onCreate(icicle);

???????????? ctx ?=? this ;

????????????????LinearLayout layout =? new ?LinearLayout( this );

????????????????layout.setOrientation(LinearLayout. VERTICAL );

??????????????????????????????

???????????????? btn ?=? new ?Button( this );

???????????????? btn .setId(101);

???????????????? btn .setBackgroundResource(R.drawable. heart );

???????????????? btn .setText( "test looper" );

???????????????? btn .setOnClickListener( this );

????????????????LinearLayout.LayoutParams param =

???????????????????? new ?LinearLayout.LayoutParams(100,50);

????????????????param. topMargin ?= 10;

????????????????layout.addView( btn , param);

???????????????

???????????????? btn2 ?=? new ?Button( this );

???????????????? btn2 .setId(102);

???????????????? btn2 .setBackgroundResource(R.drawable. ok_blue );

???????????????? btn2 .setText( "exit" );

???????????????? btn2 .setOnClickListener( this );

????????????????layout.addView( btn2 , param);

???????????????

???????????????? tv ?=? new ?TextView( this );

???????????????? tv .setTextColor(Color. WHITE );

???????????????? tv .setText( "" );

????????????????LinearLayout.LayoutParams param2 =

??????????????????? new ?LinearLayout.LayoutParams( FP ,? WC );

????????????????param2. topMargin ?= 10;

????????????????layout.addView( tv , param2);

????????????????setContentView(layout);?

???????????????? //------------------------

???????????????? r ?=? new ?RR();

?????????}

?????????? public ? void ?onClick(View v) {

???????? switch (v.getId()){

???????? case ?101:

?????????????String obj =? "mainThread" ;

?????????????Message m =? h .obtainMessage(1, 1, 1, obj);

????????????? h .sendMessage(m);

????????????? break ;

???????? case ?102:

???????????? h .getLooper().quit();

????????finish();

???????????? break ;

????????}

????}

//------------------------------------------------??????

public ? class ?EventHandler? extends ?Handler {

?????????? public ?EventHandler(Looper looper) {

?????????????????????? super (looper);

??????????}

??????????? @Override

?????????????? public ? void ?handleMessage(Message msg) {

?????????????????????((Activity) ctx ).setTitle((String)msg. obj );

????????????}

????????}

//------------------------------------------------?????

public ? class ?RR? implements ?Runnable {

???? public ?RR() {

????????Thread aThread =? new ?Thread( null ,? this ,? "RR" );

????????aThread.start();

????}

???? public ? void ?run() {

?????????Looper. prepare ();

????????? h ?=? new ?Handler(){

??????????????? public ? void ?handleMessage(Message msg) {

??????????????????EventHandler ha =? new ?EventHandler(Looper. getMainLooper ());

????????????????????String obj = (String)msg. obj ?+? ", myThread" ;

?????????????????????Message m = ha.obtainMessage(1, 1, 1, obj);

?????????????????????ha.sendMessage(m);

?????????}

?????????};

?????????Looper. loop ();

??????}

??}

}

?

?

當(dāng)子線程執(zhí)行到 RR() 函數(shù)時,創(chuàng)建一個子線程,并執(zhí)行 run() 函數(shù),就將 消息發(fā)送 給主線程了。

活用Android的Message Queue(3)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: sihu永久在线播放地址 | 四虎免费永久观看 | 久章草在线视频 | 中文字幕热久久久久久久 | 亚洲一片| 国产日产欧产麻豆精品精品推荐 | 国产二区精品视频 | 夜夜爽天天狠狠九月婷婷 | 日韩中文字幕视频在线 | 精品热久国产福利视频 | 免费看片aⅴ免费大片 | 伊人色婷婷 | 日本免费一区尤物 | 国产精品爱久久久 | 婷婷综合色伊人阁 | 成人欧美日韩高清不卡 | 欧美日韩中文字幕在线视频 | 欧美毛片aaaaa片久久久久 | 国产看片视频 | 亚洲片在线 | 欧美色综合高清免费 | 久久九九青青国产精品 | 日本叼嘿 | 亚洲va久久久噜噜噜久久男同 | 成年人天堂 | 国产成人精品无缓存在线播放 | 国产成人h片视频在线观看 国产成人h综合亚洲欧美在线 | 日韩精品欧美高清区 | 欧美乱大交xxxxxbbb | 久久99热在线观看7 久久99热这里只有精品 | 色片在线免费观看 | 99这里只有 | 免费特黄一级欧美大片在线看 | 日韩日日操 | 欧美伊人久久久久久久久影院 | 中文字幕日韩在线一区国内 | 羞羞视频在线观看视频 | 欧美激情视频网址 | 亚洲视频在线观看免费视频 | 日韩精品高清自在线 | 欧美日韩一级黄色片 |