Android 子線程間通信


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();這句話讓消息循環,就不會有輸出提示了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM