iOS 12.2:CMMotionManager阻止主线程

问题描述 投票:0回答:1

我有CoreMotion和以下代码的问题:

let motionManager = CMMotionManager()

它阻止我的主线程4-5秒,我不知道为什么。当我将iPhone XR更新为12.2时出现问题。它不会在12.1.3上使用iPhone 6S阻止主线程。

我认为这可能是硬件问题或iOS版本。

谢谢

ios swift core-motion ios12 cmmotionmanager
1个回答
0
投票

CoreMotion在init期间自己做了很多事情。 移动初始化做一个不同的线程。 编辑:

我可以在开发iPhone Xs上确认12.2的问题。在真正使用过的设备上没有问题。我还看到了违规警告,告诉CoreMotion尝试从后台线程访问Applicationstate。

但是,将init移动到单独的线程会修复任何UI挂起。 coremotion的init仍然需要一段时间。我创建了一个空的单视图应用程序项目并更改了ViewController类

class ViewController: UIViewController {

    var motionManager: CMMotionManager?

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        view.backgroundColor = UIColor.red
        DispatchQueue.global().async {
            self.motionManager = CMMotionManager()
            DispatchQueue.main.async {
                self.view.backgroundColor = UIColor.green
            }
        }
        view.backgroundColor = UIColor.yellow
    }

}

没有单独的线程,红色仍然存在。使用单独的线程,颜色为黄色,最后在开发XS上为绿色,在iPhone 8Plus上为绿色。 加成: 有趣的是,如果没有附加XCode,开发设备就没有问题。尝试运行代码而不连接到调试器。

© www.soinside.com 2019 - 2024. All rights reserved.