今更聞けない、iOSのマルチタスクの仕組みを解説しておく

マルチタスク

iPhone 4Sになる以前からもiPhoneの最大の課題は電池持ち。僕のようにTwitterとInstagramをガツガツ使っていると一日が終わる前に電池が切れてしまうこともしばしば。

色々なところでiPhoneの電池持ちを改善する方法は紹介されている(gori.meでもこんな記事を書いている)が、中でもよく見かけるのはマルチタスクバーに表示されているアプリを定期的に消すこと。ホームボタンをダブルクリックし、アイコンを長押しして片っ端から消していく作業だ。

残念ながら、これをやっても電池持ちを改善するという目的には全く役に立たない。その理由と共にiOSのマルチタスクの仕組みについてiPhoneHacksが解説していたので、紹介する!

マルチタスクバーは「最近利用したアプリ一覧」

the iOS multitasking bar does not contain “a list of all running apps”. It contains “a list of recently used apps”. The user never has to manage background tasks on iOS.

そもそも根本的に誤解されがちなのが、マルチタスクバーは「動作中のアプリ一覧」ではない、ということ。iOSは、ユーザーが自分自身でバックグラウンドで動作しているアプリの管理をする必要が一切ないように作られている

When you press the home button, iOS will tell the app to quit. In almost all cases, it quits, it stops using CPU time (and hence battery) and the memory it was using is eventually recovered if required.

ホームボタンを押すと基本的にアプリはCPUの利用を停止するため、マルチタスクバーからアプリを消しても消さなくても電池持ちには関係無い。マルチタスクバーに表示されているアプリはあくまでも「最近利用したアプリ一覧」であるのだ。

ホームボタンを押してから裏では何が起きているのか

もっと技術的な側面から解説する。iOSのアプリには5種類の起動状態があるそうだ。

  • Not running」:アプリがそもそも立ち上がっていない状態
  • 「Inactive」:アプリが最前面にあるが、利用していない状態(例:アプリを開いたままロック画面にした時
  • Active」:要は起動中
  • Background」:アプリは最前面にないが、まだ動作している状態
  • Suspended」:メモリはまだ確保しているが、動作はしていない状態

分かりづらいのは「Active」⇒「Background」⇒「Suspended」⇒「Not running」の間で何が裏で起きているか、ということ。順を追って説明する。

まず、アプリを起動中にホームボタンを押すと、アプリは「Active」⇒「Background」に起動状態が変更される。そして、殆どのアプリは数秒以内に「Background」⇒「Suspended」に切り替わるようだ。

ここで多くの人が勘違いしているのが「Suspended」状態のこと。この時は既にCPUに負荷がかかっていないので、電池には影響はない。

Speirs also goes on to explain that when you an app is sent to the Background, it usually moves to the Suspended state within 5 seconds unless the app informs iOS that it is starting a background task. Even in such cases the apps don’t run indefinitely but are given approximately 10 mins by the iOS to finish the background task after which they’re forcibly suspended by iOS.

一般的にはホームボタンを押してから5秒以内に「Background」⇒「Suspended」に切り替わるものの、アプリによってはバックグラウンドで動作することもある。その場合は、約10分以内で処理が完了しなければiOS側で強制的に「Suspended」になる。

ちなみに、「Suspended」でメモリを確保しているのは、次回起動をスピードアップするため。万が一メモリが足りなくなった場合、iOSが自動的に「Suspended」状態のアプリを「Not running」に切り替え、メモリを解放してくれるように設計されているそうだ。

ただし、例外もある

iOSアプリは10分以内に処理が完了しなければ強制的に「Suspended」状態になるようだが、例外が5種類あるようだ。

  • オーディオ系アプリ:iPod、Pandora等
  • VoIP系アプリ:Skype、LINE等
  • 位置情報系アプリ:Maps、Runkeeper等
  • Newsstand:新しいコンテンツをダウンロードしている場合
  • 外部アクセサリー系:外部のアクセサリーに接続している場合。iPad Camera Connection Kit

これらのアプリはバックグラウンドで動作しCPUに負荷を掛け続けるため、電池持ちに影響してしまう。要注意だ。

iOSのマルチタスクについてのまとめ

  1. マルチタスクバーにアプリあるアプリを消しても電池持ちには影響しない
  2. ホームボタンを押すとアプリは「Active」⇒「Background」に切り替わり、殆どのアプリは5秒以内に「Background」⇒「Suspended」に切り替わる。
  3. アプリによってはすぐに「Suspended」に切り替わらずバックグラウンドで動作することもあるが、10分以内には強制的「Suspended」になる。
  4. メモリが足りなくなった場合、iOSが自動的に「Suspended」状態のアプリを「Not running」に切り替え、メモリを解放してくれる
  5. 一部アプリはバックグラウンド動作が許されているものもある

以上!個人的には、電池持ちが気になるのであればモバイルバッテリーを持ち運ぶことを強くオススメする。僕も必ずカバンの中にはエネループを常備している。

(via iPhoneHacks

Apple新学期を始めようキャンペーン