Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android主線程、子線程通信(Thread+handler)

Android主線程、子線程通信(Thread+handler)

編輯:關於Android編程

Android是基於Java的,所以也分主線程,子線程!
主線程:實現業務邏輯、UI繪制更新、各子線程串連,類似於將軍;
子線程:完成耗時(聯網取數據、SD卡數據加載、後台長時間運行)操作,類似於小兵;

一、子線程向主線程發消息(Thread+handler):
1、主線程中定義Handler:
Java代碼 收藏代碼
  1. Handler mHandler = new Handler(){
  2.  
  3. @Override
  4. public void handleMessage(Message msg) {
  5. super.handleMessage(msg);
  6. switch (msg.what) {
  7. case 0:
  8. //do something,refresh UI;
  9. break;
  10. default:
  11. break;
  12. }
  13. }
  14.  
  15. };

    2、子線程處理完耗時操作之後發消息給主線程,更新UI:
    Java代碼 收藏代碼
    1. mHandler.sendEmptyMessage(0);
      這樣在子線程與主線程任務分工的條件下完成了消息交互;

      二、主線程向子線程發送消息(Thread+handler):
      主線程碰到耗時操作要子線程完成,此時發通知給子線程,操作步驟如下:
      1、子線程中定義Handler,Handler定義在哪個線程中,就跟那個線程綁定,在線程中綁定Handler需要調用Looper.prepare();方法,主線程中不調用是因為主線程默認幫你調用了;
      Java代碼 收藏代碼
      1. public class LoopThread implements Runnable {
      2.  
      3. public Handler mHandler = null;
      4.  
      5. @Override
      6. public void run() {
      7. Looper.prepare();
      8. mHandler = new Handler() {
      9. public void handleMessage(Message msg) {
      10. String result = NetUtil.getJsonContent("北京");
      11. //完成了獲取北京天氣的操作;
      12. Log.i("test", "handler"+result);
      13. }
      14. };
      15. Looper.loop();
      16. }
      17.  
      18. }
        其中Looper.prepare();和Looper.loop();維護了一個消息隊列,等待消息注入並在子線程中執行;
        2、主線程中這樣調用:
        Java代碼 收藏代碼
        1. lThread.mHandler.sendEmptyMessage(0);

          主線程向子線程發消息,讓子線程執行指定的操作,在Android中還有一種方法,即:HandlerThread,看下面的例子:
          Java代碼 收藏代碼
          1. HandlerThread handlerThread = new HandlerThread("jerome");
          2. handlerThread.start();
          3.  
          4. /**
          5. * 這裡要將HandlerThread創建的looper傳遞給threadHandler,即完成綁定;
          6. */
          7. threadHandler = new Handler(handlerThread.getLooper()) {
          8.  
          9. @Override
          10. public void handleMessage(Message msg) {
          11. super.handleMessage(msg);
          12. switch (msg.what) {
          13. case 0:
          14. 這兒可以做耗時的操作;
          15. Log.i("jerome", "hello,I am sub thread");
          16. break;
          17. default:
          18. break;
          19. }
          20. }
          21. };
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved