12

AppDelegate私のアプリケーションがバックグラウンドに入ったときのために、私は次のコードを持っています:

var backgroundUpdateTask: UIBackgroundTaskIdentifier!

func beginBackgroundUpdateTask() {
    self.backgroundUpdateTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({
        self.endBackgroundUpdateTask()
    })
}

func endBackgroundUpdateTask() {
    UIApplication.sharedApplication().endBackgroundTask(self.backgroundUpdateTask)
    self.backgroundUpdateTask = UIBackgroundTaskInvalid
}

func doBackgroundTask() {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
        self.beginBackgroundUpdateTask()

        // Do something with the result.
        var timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "displayAlert", userInfo: nil, repeats: false)
        NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode)
        NSRunLoop.currentRunLoop().run()

        // End the background task.
        self.endBackgroundUpdateTask()
    })
}

func displayAlert() {
    let note = UILocalNotification()
    note.alertBody = "As a test I'm hoping this will run in the background every X number of seconds..."
    note.soundName = UILocalNotificationDefaultSoundName
    UIApplication.sharedApplication().scheduleLocalNotification(note)
}

func applicationDidEnterBackground(application: UIApplication) {
    self.doBackgroundTask()
}

UILocalNotification()で指定された X 秒ごとに実行されることを望んでいますが、NSTimer.scheduledTimerWithTimeInterval()一度しか実行されません。

私はまだバックグラウンド タスクがどのように機能するかについて頭を悩ませようとしています。足りないものはありますか?

4

1 に答える 1

8

コード サンプルでは、​​イニシャライザで "repeats" 値を false に設定しているため、作成したタイマーは 1 回だけ起動します。

于 2015-04-18T14:18:03.747 に答える