[android—runloop] vs [ios—runloop]

以下是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—runloop] vs [ios—runloop])