[android—runloop] vs [ios—runloop]
16lz
2021-01-23
以下是android和ios对runloop的大概实现;
当然android里面不叫runloop,叫looper;
基本都是while循环来处理;
只是android是管理一个消息队列,有任务了就塞到队列里,然后looper再取出来执行;
android 实现
public static final void loop() { Looper me = myLooper();//从该线程中取出对应的looper对象 MessageQueue queue = me.mQueue;//取消息队列对象... while (true) { Message msg = queue.next(); // might block取消息队列中的一个待处理消息.. if (msg != null) { if (msg.target == null) { // No target is a magic identifier for the quit message. return; } //处理消息 msg.target.dispatchMessage(msg); msg.recycle(); } } }
IOS 实现
这里删掉了很多其他的代码,只保留了大概逻辑
do { //do something ...... //处理监听 __CFRunLoopDoObservers(rl, rlm, kCFRunLoopBeforeTimers); //处理source0 和 source1 __CFRunLoopDoSources0(rl, rlm, stopAfterHandle); __CFRunLoopDoSource1(rl, rlm, rls, msg, msg->msgh_size, &reply) ; //处理timer __CFRunLoopDoTimers(rl, rlm, mach_absolute_time()); } while (0 == retVal);
更多相关文章
- Android消息机制Handler源码分析
- Android消息提示框Toast
- 【Unity3D】与Android相互传递消息
- Android消息机制源码分析
- Android应用程序消息处理机制(Looper、Handler)分析(1)
- [Android面试系列]一句话讲清楚Android消息机制