標籤:looper data targe track tail 主線程 lis new lin
Android兩個子線程之間通訊 標籤: classthreadandroid子線程通訊2015-03-20 17:03 3239人閱讀 評論(0) 收藏 舉報 分類:個人雜談
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Android中,相信主線程和子線程之間的通訊大家都不陌生了吧。在一次面試經曆中被問到了兩個子線程之間是如何進行通訊的。哎呦!這可蒙住我了。後來回家研究了下,分享給大家。
其實android中線程通訊無非就是handler和looper的操作。
一般情況下的主線程和子線程之間的通訊,都是通過主線程中的handler把子線程中的message發給主線程中的looper,或者,主線程中的handler通過post向looper中發送一個runnable。looper預設存在於main線程中。那麼子線程中沒有Looper,該怎麼辦呢?很簡單,我們可以把looper綁定到子線程中,並且建立一個handler。在另一個線程中通過這個handler發送訊息,就可以實現子線程之間的通訊嘍!
[java] view plain copy
- public class Thread1 extends Thread{
- private Handler handler1;
- public Handler getHandler(){//注意哦,在run執行之前,返回的是null
- return handler1;
- }
- @Override
- public void run() {
-
- Looper.prepare();
- handler1 = new Handler(){
- public void handleMessage(android.os.Message msg) {
- //這裡處理訊息
- Log.i("MThread", "收到訊息了:"+Thread.currentThread().getName()+"----"+msg.obj);
- };
- };
- Looper.loop();
-
- }
-
- }
[java] view plain copy
- public class Thread2 extends Thread{
- @Override
- public void run() {
-
- for(int i=0; i<10; i++){
- Message msg = Message.obtain();
- msg.what = 1;
- msg.obj = System.currentTimeMillis()+"";
- handler1.sendMessage(msg);
- Log.i("MThread", Thread.currentThread().getName()+"----發送了訊息!"+msg.obj);
- SystemClock.sleep(1000);
- }
-
- }
- }
執行效果:
完整代碼下載請見:
http://download.csdn.net/detail/kedaweiwei/8518701
(轉載) Android兩個子線程之間通訊