在我的应用程序中,我想在应用程序进入后台时记录加速度计数据(系统授予的到期时间就足够了)。我把它编码如下:
- (void)applicationDidEnterBackground:(UIApplication *)application {
UIDevice* device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)])
backgroundSupported = device.multitaskingSupported;
if (backgroundSupported) {
UIApplication* app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
// Do the work associated with the task.
if ([application backgroundTimeRemaining] > 1.0 ) {
UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = kUpdateInterval;
}
});
在我提到的代表中:
- (void) accelerometer:(UIAccelerometer *)accelerometer
didAccelerate:(UIAcceleration *)acceleration {
if (acceleration.x > kAccelerationThreshold ||
acceleration.y > kAccelerationThreshold ||
acceleration.z > kAccelerationThreshold) {
NSLog(@"Sensed acceleration");
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
但是,当应用程序进入后台时,didAccelerate不会被触发,而是在applicationWillEnterForeground之后调用它。应用程序重新启动后(从后台),didAccelerate似乎被多次触发(可能是加速计值在后台更改的次数)。当app进入前台时,请求似乎堆积并执行。
当应用程序处于后台状态时,我有什么方法可以记录加速度计值( 在beginBackgroundTaskWithExpirationHandler)里面
请帮忙。
答案 0 :(得分:1)
您的代码按原样运行,然后应用程序退出正常继续。换句话说,您的加速度计相关代码不同步,因此不会阻止退出过程。
再次阅读评论:
// Start the long-running task and return immediately.
不幸的是,你的任务不是一个“长期”的任务。