0

NSTimerバックグラウンド タスクとして使用したいと思います。私はこのコードを書きました:

UIBackgroundTaskIdentifier bgTask;
        UIApplication  *app = [UIApplication sharedApplication];
        bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
            [app endBackgroundTask:bgTask];
        }];
        self.silenceTimer = [NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(findlocation:) userInfo:nil repeats:NO];

findlocationただし、30 秒後にメソッドを起動しません。これを行う方法を教えてください。

4

4 に答える 4

0
UIBackgroundTaskIdentifier bgTask;
    UIApplication  *app = [UIApplication sharedApplication];
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
    }];
    self.silenceTimer = [NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(findlocation:) userInfo:nil repeats:NO];

[[NSRunloop mainRunLoop] addTimer:self.silenceTimer forMode:NSDEfaultRunLoopMode];

于 2013-08-01T06:07:34.647 に答える
0

NSTimerアプリがバックグラウンド状態のときは一時停止します。

必要なことを行うには、バックグラウンド タスクを開始する必要があります。ただし、それでも、アプリがバックグラウンドに入った後、一定の時間に制限されます.

実際のバックグラウンド動作は、位置追跡、VoIP、またはオーディオ アプリに対してのみ許可されます。beginBackgroundTaskWithExpirationHandler: (他のアプリは制限に直面する必要があります。バックグラウンドに入ると、 backgroundTimeRemainingで開始したタスクを完了するための時間が与えられます)

詳細については、これを確認してくださいhttp://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html

クリーンな解決策については、この質問の受け入れられた回答を確認してください。How do I make my App run an NSTimer in the background?

于 2013-01-23T12:02:30.753 に答える
0

アプリケーションがバックグラウンドに入ったときにサウンドを再生するこのコードは、独自の使用に合わせてカスタマイズできます

- (void)applicationDidEnterBackground:(UIApplication *)application{
    backgroundTask = [application beginBackgroundTaskWithExpirationHandler: ^{
        dispatch_async(dispatch_get_main_queue(), ^{
            if (backgroundTask != UIBackgroundTaskInvalid)
            {
                [application endBackgroundTask:backgroundTask];
                backgroundTask = UIBackgroundTaskInvalid;
            }
        });
    }];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        [NSThread sleepForTimeInterval:3];
        [self startPlayingInBackground:@"default.aif"];
        NSLog(@"Time remaining: %f",[application backgroundTimeRemaining]);

        dispatch_async(dispatch_get_main_queue(), ^{
            if (backgroundTask != UIBackgroundTaskInvalid)
            {
                // if you don't call endBackgroundTask, the OS will exit your app.
                [application endBackgroundTask:backgroundTask];
                backgroundTask = UIBackgroundTaskInvalid;
            }
        });
    });
}

以下の行は、m がサウンドを再生するのに役立つコードです。これは私の目的です。

[self startPlayingInBackground:@"default.aif"];

からの参照

于 2013-01-23T12:08:30.650 に答える
-1

このコードを試してください:

dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
 dispatch_source_t timerSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, backgroundQueue);
 dispatch_source_set_timer(timerSource, dispatch_time(DISPATCH_TIME_NOW, 0), 10.0*NSEC_PER_SEC, 0*NSEC_PER_SEC);
 dispatch_source_set_event_handler(timerSource, ^{
     if(queue)
         [self findlocation];
 });
 dispatch_resume(timerSource);
于 2013-01-23T12:02:03.383 に答える