【Android框架进阶〖02〗】ThinkAndroid线程池机制
来源:互联网 发布:淘宝卖家版登录 编辑:程序博客网 时间:2024/05/23 23:13
/**************************************************************************************************
* 本博客为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数据activityKeyResIDactivityKeyTAResponse:返回的数据,结果Tag标记Data数据activityKeyResIDactivityKeyTAIResponseListener:数据返回的一个监听器onStart()onSuccess(TAResponse response)onRuning(TAResponse response)onFailure(TAResponse response)onFinish()----------------------------------------------------------------------------TACommand:TAIResponseListenerprivate 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();//abstractonPostExecuteCommand();//null}----------------------------------------------------------------------------TestMVCCommand异步下载,发送信息通知 hanlder处理数据*protected void executeCommand() { 处理耗时任务 sendSuccessMessage(arrayList); }----------------------------------------------------------------------------
/**************************************************************************************************
* 本博客为CSDN博主【MK】原创,博客地址:http://blog.csdn.net/mkrcpp/article/details/14166627
**********************************************************************************************************************/
- 【Android框架进阶〖02〗】ThinkAndroid线程池机制
- 【Android框架进阶〖00〗】ThinkAndroid注解机制
- 【Android框架进阶〖01〗】ThinkAndroid注解机制二
- 【Android框架进阶〖00〗】ThinkAndroid注解机制
- 【Android框架进阶〖00〗】ThinkAndroid注解机制
- Android框架进阶--ThinkAndroid注解机制(2)
- 【Android框架进阶〖03〗】ThinkAndroid框架总结
- Android开发框架---ThinkAndroid
- ThinkAndroid框架的注解机制
- Android 快速开发框架 ThinkAndroid
- Android快速开发框架:ThinkAndroid
- ThinkAndroid框架
- ThinkAndroid框架
- android 开源框架ThinkAndroid学习
- android开源框架-- ThinkAndroid介绍
- Android进阶-线程池
- Android 快速开发框架:推荐10个框架:afinal、ThinkAndroid ...
- Android快速开发框架:ThinkAndroid(附下载地址)
- NSURLCache内存缓存
- 数据库设计20条基本准则
- Ubuntu下使用PRM包安装MySQL5.1.72
- xfce4 rhythmbox and customize keyboard shortcuts,自定义rhythmbox的快捷键
- 关于DNS的一些常见问题(问答篇)
- 【Android框架进阶〖02〗】ThinkAndroid线程池机制
- 在JSP中调用Java Class的方法
- 理解MySQL——索引与优化
- C#中静态与非静态方法比较
- WPF/MVVM Quick Start Tutorial
- extjs 常见脚本
- Oracle数据库的备份方法
- 面向对象基本原则
- 委托的事件实例化