Class

NSBackgroundActivityScheduler

A task scheduler suitable for low priority operations that can run in the background. 低優先度演算に適している作業(タスク)スケジューラ、それはバックグラウンドで実行できます。

Declaration 宣言

class NSBackgroundActivityScheduler : NSObject

Overview 概要

Use an NSBackgroundActivityScheduler object to schedule an arbitrary maintenance or background task. It’s similar to an Timer object, in that it lets you schedule a repeating or non-repeating task. However, NSBackgroundActivityScheduler gives the system flexibility to determine the most efficient time to execute based on energy usage, thermal conditions, and CPU use. NSBackgroundActivitySchedulerオブジェクトを使って、随意のメンテナンスまたはバックグラウンド作業を予定に組んでください。それがあなたに繰り返しのまたは繰り返さない作業を予定させることにおいて、それはTimerオブジェクトに似ています。しかしながら、NSBackgroundActivitySchedulerは、システムに柔軟性を与えることで、最も効率的な時を判定して、エネルギー使用、温度条件、そしてCPU利用に基づいて実行します。

For example, use an NSBackgroundActivityScheduler object to schedule: 例えば、NSBackgroundActivitySchedulerオブジェクトを使って以下の予定を組んでください:

  • Automatic saves 自動的な保存

  • Backups バックアップ

  • Data maintenance データ保守

  • Periodic content fetches 定期刊行物を取りに行く

  • Installation of updates アップデートのインストール

  • Activities occurring in intervals of 10 minutes or more 10分またはそれ以上の間隔で発生する活動

  • Any other deferrable task あらゆる他の延期できる作業

For information about performing non-deferrable tasks efficiently, see Specify Nondeferrable Background Activities in Energy Efficiency Guide for Mac Apps. 延期できない作業の能率的な実行についての情報として、Specify Nondeferrable Background ActivitiesEnergy Efficiency Guide for Mac Appsで見てください。

Create a Scheduler スケジューラを作成する

To initialize a scheduler, call init(identifier:) for NSBackgroundActivityScheduler, and pass it a unique identifier string in reverse DNS notation (nil and zero-length strings are not allowed) that remains constant across launches of your application. See Listing 1. スケジューラを初期化するには、init(identifier:)NSBackgroundActivitySchedulerに対して呼び出してください、そしてそれに逆DNS表記法でのある固有な識別子を渡してください(nilとゼロ幅文字列は認められません)、それはあなたのアプリケーションの起動にまたがって不変のままのものです。コード出力 1を見てください。

Listing 1 Creating a scheduler コード出力 1 あるスケジューラの作成

let activity = NSBackgroundActivityScheduler(identifier: "com.example.MyApp.updatecheck")

Configure Scheduler Properties スケジューラプロパティを構成設定する

Configure the scheduler with any of the following scheduling properties: スケジューラの構成設定を次のスケジューラプロパティのいずれかで行ってください:

  • repeats—If set to true, the activity is rescheduled at the specified interval after finishing. repeatstrueに設定されるならば、その活動は完了後に指定の間隔で再度予定に組まれます。

  • interval—For repeating schedulers, the average interval between invocations of the activity. For nonrepeating schedulers, interval is the suggested interval of time between scheduling the activity and the invocation of the activity. interval— 繰り返すスケジューラに対して、その活動の発動間の平均間隔。繰り返さないスケジューラに対して、intervalは、活動を予定に組むことと活動の発動の間の推奨される時間的間隔です。

  • tolerance—The amount of time before or after the nominal fire date when the activity should be invoked. The nominal fire date is calculated by using the interval combined with the previous fire date or the time when the activity is started. These two properties create a window in time, during which the activity may be scheduled. The system will more aggressively schedule the activity as it nears the end of the grace period after the nominal fire date. The default value is half the interval. tolerance— その活動が発動されるべき名目上の起動日の前または後の時間量。名目上の起動日は、前の起動日またはその活動が開始された時間とintervalを結合することによって計算されます。それら2つのプロパティは、あるウインドウを時間内に作成します、その間にその活動は予定に組まれるかもしれません。システムは、名目上の起動日の後での猶予期間の終わりにそれが近くなるにつれ、より積極的に予定を組みます。省略時の値は、intervalの半分です。

  • qualityOfService—The default value is NSQualityOfServiceBackground. If you upgrade the quality of service above this level, the system schedules the activity more aggressively. The default value is the recommended value for most activities. For information on quality of service, see Prioritize Work at the Task Level in Energy Efficiency Guide for Mac Apps. qualityOfService— 省略時の値は、NSQualityOfServiceBackgroundです。あなたがこのレベルより上にサービスの質を向上させるならば、システムはその活動をより積極的に予定に組みます。省略時の値は、ほとんどの活動に推奨される値です。サービスの質に関する情報として、Prioritize Work at the Task LevelEnergy Efficiency Guide for Mac Appsで見てください。

Listing 2, Listing 3, and Listing 4 demonstrate different scheduling scenarios. コード出力 2コード出力 3、そしてコード出力 4は、予定を組むことの異なる起こりうる事態を実演します。

Listing 2 Scheduling an activity to fire in the next 10 minutes コード出力 2 ある活動を次の10分間のうちに起動する

activity.tolerance = 10 * 60
Listing 3 Scheduling an activity to fire between 15 and 45 minutes from now コード出力 3 ある活動を現在から15と45分の間に起動するよう予定に組む

activity.interval = 30 * 60
activity.tolerance = 15 * 60
Listing 4 Scheduling an activity to fire once each hour コード出力 4 ある活動を一時間ごとに一度起動するよう予定に組む

activity.repeats = true
activity.interval = 60 * 60

Schedule Activity with scheduleWithBlock: 活動をscheduleWithBlock:を使って予定に組む

When you’re ready to schedule the activity, call scheduleWithBlock: and provide a block of code to execute when the scheduler runs, as shown in Listing 5. The block will be called on a serial background queue appropriate for the level of quality of service specified. The system automatically uses the beginActivity(options:reason:) method (of ProcessInfo) while invoking the block, choosing appropriate options based on the specified quality of service. あなたがその活動を予定に組む準備ができた場合、scheduleWithBlock:を呼び出して、スケジューラが動作する場合に実行するコードのブロックを提供してください、 コード出力 5で示すように。ブロックは、指定されるサービスの質のレベルに適切なシリアル(直列)バックグラウンドキュー上で呼び出されます。システムは、自動的にbeginActivity(options:reason:)メソッド(ProcessInfoの)をブロック発動の間に使います、適切なオプションをサービスの指定された質に基づいて選択します。

When your block is called, it’s passed a completion handler as an argument. Configure the block to invoke this handler, passing it a result of type NSBackgroundActivityScheduler.Result to indicate whether the activity finished (NSBackgroundActivityScheduler.Result.finished) or should be deferred (NSBackgroundActivityScheduler.Result.deferred) and rescheduled for a later time. Failure to invoke the completion handler results in the activity not being rescheduled. For work that will be deferred and rescheduled, the block may optionally adjust scheduler properties, such as interval or tolerance, before calling the completion handler. あなたのブロックが呼び出される時、それは完了ハンドラを引数として渡されます。ブロックを構成設定してこのハンドラを呼び出してください、それに型NSBackgroundActivityScheduler.Resultの結果を渡して、その活動が終了した(NSBackgroundActivityScheduler.Result.finished)または繰り延べられて(NSBackgroundActivityScheduler.Result.deferred)あとで再度予定に組まれるべきかどうかを指し示してください。完了ハンドラの発動の失敗は、その活動は再度予定に組まれないという結果になります。延期されて再度予定に組まれる仕事に対して、ブロックは随意にスケジューラプロパティ、例えばintervalまたはtoleranceを、完了ハンドラを呼び出す前に調整するかもしれません。

Listing 5 Scheduling background activity コード出力 5 バックグラウンド活動を予定に組む

activity.scheduleWithBlock() { (completion: NSBackgroundActivityCompletionHandler) in
    // Perform the activity
    self.completion(NSBackgroundActivityResult.Finished)
}

Detect Whether to Defer Activity 活動を延期するかどうかを突き止める

It’s conceivable that while a lengthy activity is running, conditions may change, resulting in the activity now requiring deferral. For example, perhaps the user has unplugged the Mac and it’s now running on battery power. Your activity can call shouldDefer to determine whether this has occurred. A value of true indicates that the block should finish what it’s currently doing and invoke its completion handler with a value of NSBackgroundActivityScheduler.Result.deferred. See Listing 6. ある長すぎる活動が実行中である間、条件が変わり、その活動はそのとき延期を必要とする結果になるということはありえないことではありません。例えば、ことによるとユーザがMacのコードを抜いて、それは今ではバッテリー電源で動作しているかもしれません。あなたの活動は、shouldDeferを呼び出して、これが起こったかどうかを判定できます。true の値は、ブロックが、現在実行中のどれをやり終えて、それの完了ハンドラをNSBackgroundActivityScheduler.Result.deferredの値で発動すべきかを指し示します。コード出力 6を見てください。

Listing 6 Detecting deferred background activity コード出力 6 延期されるバックグラウンド活動を見つけ出す

if activity.shouldDefer {
    // Wrap up processing and prepare to defer activity
    self.completion(NSBackgroundActivityResult.Deferred)
} else {
    // Continue processing
    self.completion(NSBackgroundActivityResult.Finished)
}

Stop Activity 活動を停止する

Call invalidate() to stop scheduling an activity, as shown in Listing 7. invalidate()を呼び出して、ある活動を予定に組むことを停止します、コード出力 7で示すように。

Listing 7 Stopping background activity コード出力 7 バックグラウンド活動を停止する

activity.invalidate()

Topics 話題

Background Scheduler Attributes バックグラウンドスケジューラ属性

Initializing Schedulers スケジューラを初期化する

Scheduling Activity 活動を予定に組む

Stopping Scheduled Activity 予定に組まれた活動を停止する

Constants 定数

Relationships 関係

Inherits From 継承元

See Also 参照

System Interaction システム相互作用