画面ではバックグラウンドでアプリが動いているように見えるが実際は?

米国時間9月18日(日本時間9月19日未明)に配信が開始され、9月20日発売の「iPhone 5s」「iPhone 5c」にも標準搭載されたApple製スマートフォンおよびタブレットなど向けの新OS「iOS 7」。

数ある新機能の1つに改良されたマルチタスキング(マルチタスク)機能があります。当初「従来の制限が緩和されすべてのアプリがバックグラウンドで動作する」ようなことが言われていましたが、実際のところはちょっと様子が違うようです。

iOS 7のマルチタスキングでは何ができて何ができないのか? 今回の「スマホのちょっと深いとこ」は、そんな話題をAppleの資料を手掛かりにしながら紹介していきたいと思います。

【iOSのマルチタスキングとは?】

最初にiOSのマルチタスキング(*1)について概要を説明します。iPhoneの初期のOSでは、ホームボタンを押すと必ずアプリが終了するため複数のアプリを同時に実行できない仕様でしたが、2010年にリリースされた「iOS 4」からはマルチタスキングに対応したことで、ホームボタンを押すとアプリが終了するのではなく、裏側で待機するようになりました。ホームボタンを2度押しすることでアプリの一覧が表示され、複数のアプリを切り替えて使うことができます。

multitasking_001
マルチタスキングにより複数のアプリを切り替えて使うことが可能に

従来のiOSにおけるマルチタスキングでは、裏側に回ったアプリはOSにより動作を停止されるため「画面表示されていないアプリが裏で勝手に処理を継続する」ことは原則として許されず(*2)、位置情報の取得など特定の機能のみがバックグラウンドでの動作を許可されます。

これがiOS 7では、マルチタスキングの制限が緩和され、「すべてのアプリがバックグラウンドで動作する」という記事が、iOS 7の発表当初は各所で散見されました。

*1: 複数のアプリを並列で利用できる機能について、Appleは一貫して「マルチタスキング」(Multitasking)という用語を用いています。

*2: アプリが裏側に回っても特定の処理が完了するまで処理を継続するようOSにリクエストすることができますが、永久的に処理を続けることはできない仕様になっています。

【マルチタスキングに関するAppleの説明を再確認】

では、実際のところ、iOS 7で「すべてのアプリがバックグラウンドで動作する」のでしょうか。Appleによる公式の説明を確認してみます。

まず、iOS 7が発表された2013年6月開催の「WWDC 2013」における説明では、確かに「Multitasking for all apps with great battery life(素晴らしいバッテリー寿命を実現する、すべてのアプリのためのマルチタスキング)」とうたわれています。「すべてのアプリがバックグラウンドで動作する」という話題はここからきているものと思われます。

multitasking_002
WWDC 2013におけるiOS 7のマルチタスキングについての説明

一方で、iOS 7のユーザー向けに説明するApple公式Webページには、マルチタスキングについて以下のように書かれています。

iOS 7はあなたがアプリケーションを使いたくなる時間を学習し、あなたがアプリケーションを起動する前にコンテンツを更新しておきます。例えば、お気に入りのソーシャルアプリケーションを朝の9時にチェックする習慣があるなら、その時間の前にiOS 7がフィードを読み込んでおきます。あなたがしたいことを先読みする。それがiOS 7のマルチタスキングです。

この文章には「アプリケーションを起動する前にコンテンツを更新するようにできる」としか書かれておらず、「すべてのアプリがバックグラウンドで動作する」という内容は含まれていません。

multitasking_003
Appleのマルチタスキングに関する説明にバックグラウンド動作の記述はない

【開発者向け文書からマルチタスキングを理解する】

ますます混乱してしまいそうな状況ですが、iOSについて確実な情報を得ようと思えば、Appleが公開している開発者向け文書にあたるのが定石です。iOS 7における変更点が記載された文書にはマルチタスキングについて以下のように記載されています。

「iOS 7 supports two new background execution modes for apps(iOS 7は新しい2種類のバックグラウンド実行モードをサポートする)」
multitasking_004
iOS 7でマルチタスキングは拡張されている(Appleの開発者向け文書より)

実はiOS 4でマルチタスキングが導入された際に、バックグラウンド実行モード(=バックグラウンドで動作することができる機能)がいくつか定義されました。アプリはどのバックグラウンド実行モードを使うかをiOSに対して宣言することで、宣言した内容のバックグラウンド動作が許可されます。

iOS 7で利用できるバックグラウンド実行モードは以下の通りです。No.8と9がiOS 7で追加された項目です。

No. 実行モード バックグラウンドでできること
1 Audio オーディオ再生
2 Location 位置情報の取得
3 Voice over IP IP電話の着信など
4 Newsstand downloads Newsstandのコンテンツをダウンロード
5 External accessory
communications
外部アクセサリーとの通信
6 Bluetooth networking Bluetooth外部アクセサリーとの通信
7 Bluetooth data sharing Bluetoothを用いたデータ共有
8 Background fetch 定期的にコンテンツをダウンロード
9 Remote notification プッシュ通知の受信をきっかけとしてコンテンツをダウンロード

No.8は定期的に(*3)、No.9はアプリがプッシュ通知を受信したときに、アプリに対してコンテンツをダウンロードする機会を提供します。どちらもOSからアプリに対して処理のきっかけが提供される(*4)ため、「アプリが裏側でなんでもやりたい放題」というバックグラウンド動作とは異なるものと言えます。

*3: 実行間隔(の目安)はアプリ開発者が指定可能ですが、実際の実行タイミングは電波状況などによりiOSが判断します。

*4: 具体的には、アプリにおいて実装された特定の処理(メソッド)がOSから呼び出されます。

ただこの機能をうまく使えば(Appleがアピールしているように)アプリがバックグラウンド状態にあってもアプリ内のコンテンツを最新に保つ処理や、プッシュ通知により任意のタイミングでコンテンツを更新させる処理が可能になり、利用者の利便性アップにつなげることが可能になります。

【拡張されたバックグラウンド機能を活用したアプリの登場に期待】

本記事の結論は、以下の通りです。

1)iOS 7においても「すべてのアプリがバックグラウンドでやりたい放題動作できる」わけではない(iOS 6以前と同じ)
2)iOS 7においては新しいバックグラウンド実行モードを利用するようアプリを設定することで、バックグラウンド状態においてもアプリのコンテンツを定期的、あるいはプッシュ通知をきっかけとして更新することができる
3)つまりWWCD 2013でAppleが発表した「すべてのアプリのためのマルチタスキング」とは「すべてのアプリで活用できる新しいバックグラウンド実行モードを用意した」ということであり、iOS 7において既存のすべてのアプリが無条件でバックグラウンド動作するという意味ではない

この仕様は、バックグラウンドで様々な処理を行いたいというアプリ開発者や利用者のニーズと、バックグラウンドでなんでも処理させることによるバッテリー消費の増加という対立事項に対するAppleの回答なのでしょう。

iOS 7の拡張されたバックグラウンド実行モードは、今までiOSアプリで実現できなかった様々な機能を開発者のアイデア次第で実現できる可能性を秘めています。この新機能を活用したより魅力的なアプリが多く出回ることを期待したいですね。


■関連リンク
エスマックス(S-MAX)
エスマックス(S-MAX) smaxjp on Twitter
S-MAX - Facebookページ
Apple、WWDC 2013にてiPhoneなど向け次期プラットフォーム「iOS 7」を発表!フラットな新デザインと完全マルチタスク導入など最大の変更へ――開発者向けβ版は本日から、正式版は今秋提供予定 - S-MAX
iOS 7 (ユーザー向け、Apple)
iOS 7.0 (開発者向け、iOS Developer Library)
連載『吉川英一の「スマホのちょっと深いとこ」』記事一覧 - S-MAX
今日の気分はバリいくつ?