代码之家  ›  专栏  ›  技术社区  ›  CodeBender

带有coremotion的主线程检查器警告,仅出现在2018款iPhone上

  •  0
  • CodeBender  · 技术社区  · 7 年前

    以下是该问题的一个极其简化的版本:

    import UIKit
    import CoreMotion
    
    class ViewController: UIViewController {
        private let manager = CMMotionManager()
        private let interval = 0.01
    
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            startUpdates()
        }
    
        private func startUpdates() {
            let queue = OperationQueue()
            queue.name = "com.demo.motion"
            queue.qualityOfService = .userInteractive
            queue.maxConcurrentOperationCount = 1
            manager.accelerometerUpdateInterval = interval
            manager.startAccelerometerUpdates(to: queue) { _, _ in }
        }
    }
    

    当我在iPhone xr上运行此程序时,我将收到以下信息:

    主线程检查器:在后台线程上调用的UI API: -[uiapplication applicationstate]pid:1237,tid:147763,thread name:com.apple.coremotion.motionthread,queue name: com.apple.root.default-qos.overcommit,qos:0

    • 我的设备正在运行 1.1.4 ,这是当前最新的iOS版本
    • 在各种iPad(2018年之前)、iPhone 8、iPhone 6s和其他旧款手机上运行此功能时,问题并未出现。
    • 改变 qualityOfService 对这个没有影响(我喜欢使用 utility )
    • 出于好奇,我把整个 startUpdates() 围绕主调度运行,但未成功

    基于队列名称,当发生这种情况时,我的假设是,这是一种内部的东西,与旧设备相比,XR中更快的处理器只会暴露出来。

    1 回复  |  直到 7 年前
        1
  •  0
  •   CodeBender    7 年前

    这是一个已知问题,已报告给 Apple with a radar linked here .

    希望它很快就会被解决,但我没有看到它的任何条目,所以我想有一些东西可供其他人使用。

    如果可以,请提交副本。

    幸运的是,我没有看到任何负面影响。 然而 .