Apps

iOSのマルチタスクの実際の仕組み

iOSのマルチタスクの実際の仕組み

iOSのマルチタスクバーに関する誤解について、ブログ界隈で激しい議論が交わされています。多くのiOSユーザーは、マルチタスクバーにアプリを放置しておくとバッテリー消費が激しくなり、システムリソースを大量に消費すると考えていますが、Fraser Speirsという開発者がその誤解を解き明かそうと試みました。

iOSのマルチタスクバーを手動で管理する必要はありません。ホームボタンをダブルタップした後に表示されるアプリは実際には「実行中」ではないからです。実際、マルチタスクバーはタスクマネージャーではなく、ブラウザの履歴のようなものと考えるのが適切です。

Speirs氏はブログ記事の中で、Apple StoreのGeniusたちが長年にわたりiOSのマルチタスクバーに関する誤った情報を広めてきたという事実について言及しています。私自身、Geniusたちから、システムリソースを解放しバッテリーを節約するために、iPhoneのマルチタスクバーからアプリを削除すべきだとアドバイスされたことがあります。しかし、このアドバイスは真実とは程遠いものです。マルチタスクバーは、ユーザーが最近開いたアプリを切り替えるための、単なる見栄えの良い参照ツールに過ぎません。

その証拠に、iPhoneを再起動しても最近開いたアプリがすべてマルチタスクバーに表示されている。実際にバックグラウンドで動作しているアプリだけを表示する脱獄ツールも存在するが、一般ユーザーがそのようなことを心配する必要は全くないだろう。

ほとんどの場合、マルチタスクバーに触れる必要はありません。ホームボタンを押してアプリを終了させると、そのアプリは基本的にスリープ状態になります。10回中9回は、閉じたアプリがバックグラウンドでiOSデバイスの電力を消費し続けることはありません。ただし、いくつか例外もあります。

iOSがアプリを扱う様々な方法を分類しておくと便利です。Speirs氏がそれをまとめてくれました。

  • 実行されていません – アプリは終了しているか、起動されていません。
  • 非アクティブ – アプリはフォアグラウンドにありますが、イベントを受信して​​いません(たとえば、ユーザーがアプリをアクティブにした状態でデバイスをロックした場合など)
  • アクティブ – アプリの通常の「使用中」状態
  • バックグラウンド – アプリは画面上に表示されなくなりましたが、コードはまだ実行されています
  • 中断 – アプリはメモリ内に常駐していますが、コードを実行していません

これ以上複雑にするのは意味がないので、本題に入りましょう。Speirs氏によると、非アクティブとアクティブは今回の議論には全く関係ないそうです。iOSデバイスをロックすると、アクティブアプリはほぼフリーズ状態になるからではないかと推測しています。理由は何であれ、先に進みましょう。

技術的には、すべてのアプリがバックグラウンド状態になれるのはわずか5秒です。これは、ホームボタンでアプリを終了した時です。iOSは、各アプリがサスペンド状態に移行する前に、自身をクリーンアップするための非常に限られた時間を与えます。サスペンド状態になったアプリは、すぐに再起動できるようにデバイスのオンボードメモリに残ります(これは、現在のMac OS X Lionがアプリを処理する方法に似ています)。一般的に考えられているのとは異なり、サスペンド状態はデバイスのシステムリソースやバッテリーを消費しません。サスペンド状態のアプリが多すぎる場合、iOSは不要なサスペンド状態を消去し、アプリを「実行されていない」状態に移行します。

厄介なのは、アプリがバックグラウンド状態で5秒ではなく10分間実行するための特別な許可を要求する場合です。Speirs氏はInstacastを例に挙げています。InstacastはiOSにポッドキャストのダウンロードを「バックグラウンドタスク」として伝えることができます。つまり、iOSはInstacastにバックグラウンドでダウンロードを完了するための追加時間を10分与えます。10分が経過すると、アプリは強制的に一時停止状態になります。

メールなどの特定のアプリは、バックグラウンドで実行され続けます。オーディオ、GPS、VoIP、ニューススタンド、アクセサリ/周辺機器アプリはすべて、タスクが完了するまでバックグラウンドで実行されます。個人的な経験から言うと、メールはiOSシステムで最もシステムを消費するアプリの1つです。このアプリは継続的に新しいメールを取得し、そのたびにバッテリーとCPUサイクルが必要になります。残念ながら、メールがバッテリーに与える影響を最小限に抑える唯一の方法は、使用していないときにアプリを完全に終了することです。メールを散発的に(数時間ごとなど)取得するように設定することもできますが、ほとんどの人にとって、それではスマートフォンにメールクライアントをインストールする意味がなくなります。メールはできるだけ早く受け取りたいものです。

こうした状況の好例として、iOS版Skypeアプリの初期の頃が挙げられます。リリース当初は、Skypeアプリ単体でバッテリーを消耗させ、完全に使い果たしていました。しかし、数々のアップデートを経て、今ではSkypeアプリは賢くなり、かなりうまく対処できるようになりました。

正常に動作するために継続的なバックグラウンドアクティビティを必要とするすべてのアプリ(例えばマップ)は、デバイスのリソースの使用をいつ停止するかを判断できるほど適切に記述されている必要があります。Instacastは、バックグラウンドでポッドキャストの再生を終えると、自動的にサスペンド状態に移行します。マルチタスクバーでアプリを強制終了する必要があるのは、アプリが正常に動作していない場合のみです。そして、そのような状況が発生した場合、それはiOSではなくアプリの責任です。

結論:iOSのマルチタスクバーを手動で操作しようとするのは時間の無駄です。Apple Storeの店員がそうではないとアドバイスしてきたら、親切に訂正してください。

Milawo
Milawo is a contributing author, focusing on sharing the latest news and deep content.