J.S*_*ral 12 iphone cocoa-touch intervals core-motion
我正在移植我最初使用IOS 3加速度计编写的应用程序,以整合新的IOS 4运动功能.
在捕获动作时,应用程序几乎没有其他功能 - 例如,没有图形更新.
我正在做以下操作来设置动作更新,以替代我之前使用的加速度计.我确实意识到我可以使用NSTimer或其他东西来重建我自己的民意调查,并且可能会继续这样做.
[motionManager setDeviceMotionUpdateInterval:updateInterval];
CMDeviceMotionHandler motionHandler = ^(CMDeviceMotion *motion, NSError *error) {
[self processMotion:motion withError:error];
};
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:motionHandler];
这样可行,但更新间隔的行为不符合预期.我已经删除了processMotion方法中的所有执行代码,除了保存时间戳以查看真实的动作更新速率.我已经测试了这个足以证明它是可重复的,甚至是1/40的奇怪结果.下表显示了我所看到的内容:
updateInterval actual events per second 1.0/20.0 13 1.0/30.0 27 1.0/40.0 27 1.0/50.0 34 1.0/60.0 40 1.0/70.0 57 1.0/90.0 60 1.0/100.0 74
一些注意事项:
1.我确定更新间隔设置正确,并在设置确认后进行了检查.
2.我确信我正在跟踪每次调用processMotion,没有任何使用nil CMDeviceMotion或其他奇怪的调用
3.我没有做任何阻止事情的重要处理,只是等待运动事件并录制它们.作为加速度计
4的代表,这一切都非常好. 运动数据很好,很少更新:)
5.这是在ipod touch第4代
6 上使用ios 4.2 .我尽力搜索,避风港没有看到解释,虽然我已经看到一些人在申请60hz时看到50hz更新频率的报告,这可能是相关的.
我将尝试的下一件事是为处理而不是使用当前队列设置专用队列,但我确实想看看这是否是已知行为.我可以理解更新速率是否会以某种方式出现瓶颈,但不确定为什么它仍然可以扩展,如果是这样的话.
同样,我想我可以重建使用NSTimer并进行自己的轮询,但我想了解为什么我会看到这个,以防我从根本上误解Core Motion框架.
好的,这是一个可能的解决方案:
并发操作的数量NSOperationQueue由操作系统决定。这意味着有时一次只能进行很少的操作,甚至一次操作 1 次。
您可以显式地将操作数量设置为某个合理的数量,例如
[operationQueue setMaxConcurrentOperationCount:5];
Run Code Online (Sandbox Code Playgroud)
享受。
| 归档时间: |
|
| 查看次数: |
3805 次 |
| 最近记录: |