首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 12.2 : CMMotionManager阻塞主线程

iOS 12.2 : CMMotionManager阻塞主线程
EN

Stack Overflow用户
提问于 2019-04-11 09:41:50
回答 1查看 700关注 0票数 0

我对CoreMotion和下面的代码有一个问题:

let motionManager = CMMotionManager()

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

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-11 10:00:08

CoreMotion在init期间自己做了很多事情。

移动初始化,执行不同的线程。

编辑:

我可以在开发iPhone Xs上用12.2确认这个问题。一个真正的二手设备上没有问题。我还看到了违反警告,告诉CoreMotion试图从后台线程访问Applicationstate。

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

代码语言:javascript
复制
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
    }

}

如果没有单独的线程,红色将保持不变。使用单独的线程,在dev XS上颜色是即时黄色,最后是绿色,在我的iPhone 8 8Plus上是即时绿色。

增添:

有趣的是,如果没有附加XCode,开发设备就没有问题。尝试在不连接到调试器的情况下运行代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55629406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档