/**************************************************************************************************
* 本博客为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);
}
----------------------------------------------------------------------------
/**************************************************************************************************
* 本博客为CSDN博主【MK】原创,博客地址:http://blog.csdn.net/mkrcpp/article/details/14166627
**********************************************************************************************************************/