Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> ThinkAndroid線程池機制

ThinkAndroid線程池機制

編輯:關於Android編程

/**************************************************************************************************    *  本博客為CSDN博主【MK】原創,博客地址:http://blog.csdn.net/mkrcpp/article/details/14166627    **********************************************************************************************************************/   TAApplication是ThinkAndroid的靈魂,整個框架的初始化工作都在這裡進行了。   其中有一個重要的工作,即初始化線程池機制 ,英文名為TACommandExecutor。   之所以稱為機制,是因為這不僅僅是一個線程池。   通過觀察代碼可以看出,最最重要的代碼是   public void ensureInitialized()   {       if (!initialized)       {           initialized = true;           TALogger.i(TACommandExecutor.this, "CommandExecutor初始化");           TACommandQueueManager.getInstance().initialize();           TALogger.i(TACommandExecutor.this, "CommandExecutor初始化");       }   }     其中涉及到一個很重要的類,即 TACommandQueueManager,看名字就知道這是一個隊列管理器 。 好,接下來我們就研究下TACommandQueueManager,   非常清晰的,我們看到連個重要的屬性,TAThreadPool,TACommandQueue,   看名字就知道一個是線程池,一個是指令隊列。然後 TACommandQueueManager的作用就是初始化線程池和初始化隊列。   通過研究線程池 TAThreadPool 的代碼可以知道,默認僅僅是創建了2個線程,並且在系統啟動時運行起來。   通過研究指令隊列TACommandQueue的代碼可以知道它維護了一個LinkedBlockingQueue,一個阻塞隊列,由鏈表實現。   阻塞隊列的好處就是:   當一個線程A申請從隊列中取數據時,如果隊列中沒有數據,那麼線程A就發生阻塞,直到隊列中存在數據。 同樣的,當線程B想向隊列中存放數據時,如果隊列已滿,那麼線程B阻塞,直到隊列中被取走了一個值,這就是咱們熟悉的生產者消費者模式嘛。 OK,說了這麼多,稍微整理下   ------------------------------------   TACommandQueueManager   初始化了    一個阻塞隊列和一個線程池,線程池不斷的從隊列中取指令並執行   TACommandExecutor       初始化了    TACommandQueueManager    TAApplication           初始化了    TACommandExecutor   ------------------------------------   基本上搞清楚了,唯一不清楚的就是什麼是Command,阻塞隊列維護的是什麼樣的指令呢,線程池執行的到底是什麼呢?   我們來分析下   TAICommand:                -getRequest()獲得請求數據       -setRequest(TARequest request)設置請求數據       -getResponse()獲得返回數據       -setResponse(TAResponse response)設置趕回數據       -execute()       -getResponseListener()獲得響應/返回監聽器       -setResponseListener(TAIResponseListener listener)設置響應/返回監聽器       -setTerminated(boolean terminated)設置是否終結/停止       -isTerminated()判斷狀態是否停止   ----------------------------------------------------------------------------              TABaseCommand:基礎指令               *getRequest()               *setRequest(TARequest request)               *getResponse()               *setResponse(TAResponse response)                  *getResponseListener()               *setResponseListener(TAIResponseListener responseListener)               *setTerminated(boolean terminated)               *isTerminated()               TARequest: 請求提交的數據                   Tag     標記                   Data        數據                   activityKeyResID                   activityKey               TAResponse:返回的數據,結果                   Tag     標記                   Data        數據                   activityKeyResID                           activityKey               TAIResponseListener:    數據返回的一個監聽器                   onStart()                   onSuccess(TAResponse response)                   onRuning(TAResponse response)                   onFailure(TAResponse response)                   onFinish()   ----------------------------------------------------------------------------                      TACommand:                       TAIResponseListener                       private Handler handler = new Handler()                       {                           public void handleMessage(Message msg)                           {                               switch (msg.what)                               {                               case command_start:                                   listener.onStart();                                   break;                               case command_runting:                                   listener.onRuning(getResponse());                                   break;                               case command_success:                                   listener.onSuccess(getResponse());                                   break;                               case command_failure:                                   listener.onFailure(getResponse());                                   break;                               case command_finish:                                   listener.onFinish();                                   break;                               default:                                   break;                               }                           };                          };                          *public final void execute()                       {                           onPreExecuteCommand();  //listener.onStart();                           executeCommand();   //abstract                           onPostExecuteCommand(); //null                       }   ----------------------------------------------------------------------------                                  TestMVCCommand  異步下載,發送信息通知 hanlder處理數據                                   *protected void executeCommand()                                    {                                         處理耗時任務                                       sendSuccessMessage(arrayList);                                    }   ----------------------------------------------------------------------------     應用初始化時,初始化了線程池,和Command 阻塞隊列,那麼由此可知,上面的一系列代碼只是為了實現統一管理 處理耗時任務的 線程, 再簡而言之,Command即類似於 AsynTask 中的 doInBackground()執行的內容。  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved