Xamarin iOS アプリが閉じられても処理を続行する方法

iOSではバックグラウンドでタスクを実行する方法が提供されています。
しかし、長い間バックグラウンドで処理を行うには制限があり、音楽再生やGPSの位置情報関連など用途が限られています。

長時間ではなくとも、アプリを閉じられた後も少しの時間だけ処理を続けて欲しい!
そんな時はUIApplicationのBeginBackgroundTaskを使用します。

アプリが閉じられてもすぐに処理を中断して欲しくない箇所の冒頭でBeginBackgroundTaskを呼び、この処理はアプリ閉じられても処理続けるよう宣言をしておくことで処理が続行されます。

処理が終わった際にはEndBackgroundTaskを呼び、処理が終わったことを宣言します。

またBeginBackgroundTaskはバックグラウンドに移行したあと処理が実行できる時間がそれほど長くないため、BeginBackgroundTaskを宣言しても該当の処理が途中で終わってしまう場合があります。
そういう時のために、BeginBackgroundTaskはもう少しでバックグラウンド処理が終わってしまうというのを通知してくれます。
BeginBackgroundTaskは引数にActionを渡すことができ、バックグラウンドでの処理実行が終わってしまいそうなタイミングになるとこのActionが呼ばれます。
そのため、ここのActionに処理が中断した時用の処理を書いておくと良いです。

コードの例は以下の通りです。

var taskId = UIApplication.SharedApplication.BeginBackgroundTask(() => {
    // 処理が途中終了する際の残処理を書いておく
    .
    .
    .
    // 残処理が完了したらEndBackgroundTaskを呼ぶ
    UIApplication.SharedApplication.EndBackgroundTask(taskId);
});
// ここから下の処理がアプリが閉じられてもバックグラウンド実行される
.
.
.
// 処理が完了したらEndBackgroundTaskを呼ぶ
UIApplication.SharedApplication.EndBackgroundTask(taskId);
タイトルとURLをコピーしました