【Android框架进阶〖02〗】ThinkAndroid线程池机制

/**************************************************************************************************

 *  本博客为CSDN博主【MK】原创,博客地址:http://blog.csdn.net/mkrcpp/article/details/14166627

 **********************************************************************************************************************/

TAApplicationThinkAndroid的灵魂,整个框架的初始化工作都在这里进行了。

其中有一个重要的工作,即初始化线程池机制 ,英文名为TACommandExecutor

之所以称为机制,是因为这不仅仅是一个线程池。

通过观察代码可以看出,最最重要的代码是

public void ensureInitialized()
{
	if (!initialized)
	{
		initialized = true;
		TALogger.i(TACommandExecutor.this, "CommandExecutor初始化");
		TACommandQueueManager.getInstance().initialize();
		TALogger.i(TACommandExecutor.this, "CommandExecutor初始化");
	}
}

其中涉及到一个很重要的类,即  TACommandQueueManager,看名字就知道这是一个队列管理器 。

好,接下来我们就研究下TACommandQueueManager

非常清晰的,我们看到连个重要的属性,TAThreadPoolTACommandQueue,

看名字就知道一个是线程池,一个是指令队列。然后 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()执行的内容。

/**************************************************************************************************

 *  本博客为CSDN博主【MK】原创,博客地址:http://blog.csdn.net/mkrcpp/article/details/14166627

 **********************************************************************************************************************/

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值