zoukankan      html  css  js  c++  java
  • 分享的一个检查主线程卡顿的小工具

    检查主线程卡顿的方法有两个

    1.通过主线程runloop添加observer,观察runloop状态变化,不难发现NSRunLoop调用方法主要就是在kCFRunLoopBeforeSources和kCFRunLoopBeforeWaiting之间,还有kCFRunLoopAfterWaiting之后,也就是如果我们发现这两个时间内耗时太长,那么就可以判定出此时主线程卡顿.

    主线程卡顿监控的例子

    2.通过一个异步线程不断的往主线程里执行一个操作,如果一个duration之内执行不成功,则认为主线程有卡顿,此时打印出掉用栈,或者设置断点可以看到当前出问题的地方

    在同事分享后,在github上找到原始作者的demo

    https://github.com/krezzoid/mainThreadPinger

     override func main() {
            while !self.cancelled {
                pingRunning = true
                
                dispatch_async(dispatch_get_main_queue(), {
                    self.pingRunning = false
                    dispatch_semaphore_signal(self.semaphore)
                })
                
                // check once per 400msec
                NSThread.sleepForTimeInterval(0.4)
                if pingRunning {
                    print("WARNING - slow UI/main thread detected!")
                }
                
                dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER)
            }
        }
    

      

  • 相关阅读:
    python编码
    异常、调试
    python的优点
    循环、判断
    对象
    模块
    函数
    变量
    Socket编程(九)
    进程简单了解和使用
  • 原文地址:https://www.cnblogs.com/wxm5558/p/5460094.html
Copyright © 2011-2022 走看看