iOSアプリがバックグラウンド状態の時に処理を継続する方法

kyamada,iosbackgroundble

iOS アプリでバックグラウンド中に処理を継続する方法を調べ、実現可能だった方法と不可だった方法に分類しました。

重要

テストをするときは Xcode からアプリを実行するのではなく、ホーム画面からアプリを起動してください。

Xcode でデバッグ実行をすると watchdog が無効になり、アプリがサスペンドしなくなります。

実現可能だった方法

1. beginBackgroundTask (opens in a new tab) メソッドを呼び出す

beginBackgroundTask メソッドを使うと、バックグラウンド状態でも 30 秒間は処理を継続することが可能です。(30 秒を超えて処理を行う方法はなさそうです。)

ただし、引数の handler の中で明示的にバックグラウンドタスクを終了させないと、アプリが終了してしまうので注意が必要です。

2. BLE 通信を行う

BLE 通信を行っている間はバックグラウンド状態でも処理を継続できます。BLE 接続をしているだけではダメで、readCharacteristic などの通信をしている必要があります。

参考: bluetooth-central バックグラウンド実行モード (opens in a new tab)

実現不可だった方法

1. Timer、DispatchQueue.main.asyncAfter、DispatchQueue.global().async を使う

iOS アプリがバックグラウンド状態では、Timer やバックグラウンドスレッドは動作しないので、これらの方法は不可能です。

© 品川アプリ.RSS