1.在android中我們平時處理的都是子線程與主線程間的通信,采用的方法是利用android中的消息循環機制,說白了就是利用Handler
而子線程與子線程的通信也可以用到Handler,也可以通過全局變量來進行通信
2.消息循環機制就不說了,由於主線程在應用啟動的時候系統就給它生成了Looper , MessageQueue等消息循環的東西,所以每次子線程
可以直接往主線程發送message。而子線程是不會自動生成Looper的,就要調用Looper.prepare();方法來為該子線程生成Looper,
生成后調用Loopre.loop()來啟動消息隊列,再在子線程中定義自己的Handler,其他子線程可以調用該Handler來進行,子線程間的通信了。
3.示例代碼:
子線程一:
1 new Thread(new Runnable() { 2 3 @Override 4 public void run() { 5 String msg; 6 Looper.prepare(); 7 8 childHandler = new Handler() { 9 @Override 10 public void handleMessage(Message msg) { 11 super.handleMessage(msg); 12 13 System.out.println("這個消息是從-->>" + msg.obj 14 + "過來的,在" + "btn的子線程當中" + "中執行的"); 15 16 } 17 18 }; 19 Looper.loop(); 20 21 } 22 }).start();
線程二:
1 new Thread(new Runnable() { 2 3 @Override 4 public void run() { 5 6 Looper loop = Looper.myLooper(); 7 8 Message msg = childHandler.obtainMessage(); 9 msg.obj = "btn2當中子線程"; 10 childHandler.sendMessage(msg); 11 12 } 13 }).start();
運行后的效果是:
這個消息是從-->>btn2當中子線程過來的,在btn的子線程當中中執行的
如果沒有Looper.loop();這句話讓消息循環,就不會有輸出提示了。