GCD 编程和 andriod 的Handler、MainThread、WorkThread
来源:互联网 发布:软件水平测试 编辑:程序博客网 时间:2024/05/29 19:40
今天看MBProgressHUD 里面的源代码看到了GCD的应用,结合android Handler和Looper 写了一个很简单的测试程序,以后再详细总结:
这是一个UILabel 模拟简单的秒表
dispatch_async(dispatch_get_global_queue(0, 0), ^{
while(YES){
sleep(1);
//方案1:
dispatch_async(dispatch_get_main_queue(), ^{
static int count =1;
[self.value setText:[NSString stringWithFormat:@"value = %d",count]];
count++;
});
//方案二:
// [self performSelectorOnMainThread:@selector(updateValue:) withObject:self waitUntilDone:0];
//方案三:
// static int count =1;
// [self.value setText:[NSString stringWithFormat:@"value = %d",count]];
// count++;
}
方案一和方案二均可以正常运行,方案三运行没由任何结果,也没有crash。
结论是:
dispatch_get_global_queue(0, 0) 是一个工作线程,由系统管理的一个concurrent(并发)pool或队列。
dispatch_async 中传入 dispatch_get_main_queue() (UI线程)相当与把代码快抛进UI线程里面。
[self performSelectorOnMainThread:@selector(updateValue:) withObject:self waitUntilDone:0]; 这个就不必说了,android中也由Activity、handler都有类似的代码,相当于把一个Runnable对象抛到UI线程队列里面。
GCD挺有意思的。
下面是sdk中的一些定义:
typedef void (^dispatch_block_t)(void);
void dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
得到queue的其中一个方法(也可以自己建一个工作队列,一般用global即可):
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
- GCD 编程和 andriod 的Handler、MainThread、WorkThread
- Android MainThread(UI线程/主线程) 与 WorkThread(主线程以外的线程) 相互sendMessage
- Handler、MainThread、Looper、MessageQueue
- workthread 和 UIthread
- 使用Handler把WrokThread的数据传到主线程MainThread中
- Andriod----Handler
- MainThread
- Andriod中Handler,Looper,MessageQueue的关系
- 多线程编程 GCD和NSOperationQueue的区别
- Android编程:定时器和Handler的使用
- Android编程:定时器和Handler的使用
- Andriod中Handler详解
- Andriod API之Handler
- andriod Handler机制原理
- Andriod Handler更新UI
- Andriod Handler消息机制
- 工作线程WorkThread和异步任务AsyncTask取舍
- Andriod编程基础(一):Andriod的优势及光明前景
- GCC 中的inline关键字
- js动态创建div等元素实例
- Android 屏幕尺寸和密度单位解读
- Ubuntu12.04.4安装 oracle 11g Release 2 (11.2) for Linux x86
- 开源中国iOS客户端学习——(一)Prefix.pch文件
- GCD 编程和 andriod 的Handler、MainThread、WorkThread
- 黑格尔各方的歌好听人会
- VS08下C++代码如何显示行号
- FreeMarker语法知识
- 面试常考的 group by +having 试题
- 时间类(一)
- 用PHP设计一个简单的聊天室
- Mysql问题
- 夕阳的陷落