先日から「また」この話が再燃しているのでこのブログでも再び書こうかと思います.
スポンサーリンク
「今回」の記事
このエントリの3日前ですがこちらになります.
Apple関連で有名な9to5macさんが直接Apple幹部に問い合わせたそうです.
今回は質問に対してシンプルに「No and No.」と回答されていますね.
「前回」の記事
同iPhone Maniaさんから昨年10月末に同様の記事が書かれています.
こちらではもう少し詳しく, Appスイッチャー(いわゆる「マルチタスク画面」)からアプリを削除するくらいなら, 設定アプリにあるAppのバックグラウンド更新をオフにした方が遥かに節約になることを述べています.
(source : AppleInsider)
更に遡る
約2年前に, ライフハッカーさんが報じています.
ここではGenius Bar経験者のScotty Loveless氏より, ズバッと指摘されています.
簡約すれば
- Appスイッチャーから毎回終了するということは毎回アプリを再起動することになる
- これにより読み込みと解放を繰り返すことになり, iPhoneにより負荷をかけることになる
- アプリを終了する処理はiOSが行っているので我々が手作業で行う必要は無い
- バックグラウンド起動できるアプリが裏で働いている場合のみ, その限りでない(この場合ステータスバーにアイコンが表示される)
iOSは一定時間までであれば「中断から復帰」させることができるのですが(後述), 頻繁に我々エンドユーザーがアプリを終了する行為はそれを飛ばして毎度再起動させる以外に手段を無くす事に等しく, 「中断から復帰」と「再起動」ではどちらがバッテリーなどにかける負担が大きいかは言うまでもありません.
一部では「こまめにマルチタスク画面からアプリを削除すればサクサクになる」というのが定説でしたが, まるっきり逆だった…いうことです.
iOSのマルチタスク画面について更に遡っておさらい
apptoiさんが2012年, 4年も前に投稿したものです.
iOSのマルチタスク画面は「起動中のアプリ一覧」というイメージが強いですが, 実際にはそれは間違いです.
ホームボタンが押されるとiOSは基本的にそのアプリを終了してbackground状態となり, バックグラウンド対応のアプリであれば通常は10分, 非対応は数秒, 仕様によっては無制限の間バックグラウンド状態となり, その後suspendedという状態となり, メモリは使っているが停止状態で, 再び起動するときに「中断から復帰」できるようになっています.
iOSにおけるアプリの状態
iOSでは上記を含め以下5つの「状態」が存在します.
- Not running
…アプリが起動していない状態, 若しくは実行されていたがiOSによって終了された状態
- Inactive (非使用中)
…アプリがフォアグラウンド(画面の一番手前)で実行中だが何もイベントを受信していない状態
- Active (実行中)
…アプリがフォアグラウンドで実行中で, イベントを受信している状態
- Background
…アプリがバックグラウンドにあり, コードを実行している状態.
Suspendedになる前の状態で何もしなければバックグラウンド対応アプリなら通常10分(設定次第で無制限), 非対応なら数秒でSuspendedに移行, 追加要求で維持可能.
バックグラウンド対応とは「オーディオ」「VoIP」「位置情報」「ニューススタンドなどのコンテンツダウンロード」「外部アクセサリ」を利用するアプリになります(対応しており, かつ利用中の場合に限ります).
- Suspended
…アプリがバックグラウンドにあり, コードを実行していない状態.
メモリを消費している状態だが, 他のアプリの起動などでメモリ不足の場合, iOSはこのメモリ領域を消去して割り当てます.
この状態ではバッテリーを消費していません.
色んなアプリを使ってると再び開きなおしたときに再起動してしまった…というのは, この
Suspended状態だったが他の処理のために対象メモリを削除された
為に, 事実上Not runningとなってしまったのが原因ということです.
つまりiOSの仕様なわけですね.
これらのステータスの流れを書いたのが以下になります.
簡単に言えば, 例えばアプリを起動して終了するまでの流れは
Not running(タップする直前まで)
→Inactive(タップ直後)
→Active(実行)
→Inactive(終了してBackgroundへ以降する直前)
→Background(数秒~)
→Suspended
となります.
Suspendedされた領域の解釈
Suspendedはその性質から, ある意味では「空きメモリ」と解釈しても良いのかもしれません(実際には違うのであくまでも「イメージ」です).
既に実行していたアプリを中断から復帰でき, 或いは他のアプリなどを実行するために消費することができる状態…というわけですからね.
バッテリー, メモリをなるべく消費しないように工夫された仕組み
このSuspendedの仕組みはちょっと難しいかもしれませんが, 簡単に言えば「出来るだけバッテリーを消費せず, メモリを圧迫しないようにするため」に考えられた仕組みと言えます.
スマホアプリ, 特にゲームアプリは大量のメモリを食うため, 実際のところメモリはいくらあっても足りません.
大容量のメモリを積んだとしてもいづれメモリの空きは無くなりますし, 仮想メモリは動作を鈍らせるだけ…マルチタスクの仕組みは便利な一方いつかは訪れるこのメモリの空きに立ち向かわなくてはいけません.
iOSが選んだのはマルチタスクでなく, 殆どシングルタスクですがバックグラウンドを要するアプリでなければ直ぐにSuspendedの状態にしてメモリの空きを確保する…という方法なわけです.
結果, 件のマルチタスク画面は「起動中のアプリ一覧」ではない…ということが言えます.
かといって放置して良いわけでもない
Suspendedとなったアプリの大半は事実上「終了した」と言えますが, Appスイッチャーには残り続けます.
Appスイッチャーは中断から復帰する場合も含めある意味でのランチャーとしての性質を持っているため, 今回の話抜きに有効に活用する上では整理することも必要となります, その場合Appスイッチャーにあるリストを全く削除しないとこれまで起動したことのあるアプリがずらりと並び, 煩雑になってしまいます.
ある程度は定期的に上にスワイプして終了することも大事です.
メモリ解放アプリは不要か?
となると気になるのはApp Storeにたくさんあるメモリ解放アプリの存在価値です.
iOSが勝手に終了してくれるんですから, わざわざメモリ解放アプリを使う必要はあるのか…と考えたくなるのは自然なことです.
Suspendedは, そのアプリを再び起動するときに素早く起動できるようにするためにメモリの確保だけをしている状態です.
その領域を消費してアプリを起動したりする行為は, そのSuspendedをNot runningに変更することになります.
メモリ解放アプリはNot runningでないメモリステータス(システムなどの領域を除く)をNot runningにします(アプリによってどこまでかは様々です).
つまり放っておけばiOSがメモリ解放をしてくれます.
そう言う意味では, Suspendedで占められた状態を一気に解放した状態で起動した方が, たった1ステップだけですが早まると解釈できます.
それに「実質的にiOSがやってくれるんだからアプリから手動でやる必要は無い」というのも, 例えばアプリの使用中に不具合が生じたり強制終了したなどのイレギュラーが行った場合など, こちらの都合でメモリ解放したい事情はまれにあります.
また複数のアプリで連携して作業をする場合, Suspendedで埋まった状態で行うとアプリ同士を渡っている途中で一方またはすべてが再起動する恐れがあります.
その場合予めメモリ解放してSuspendedをすべて削除すれば解消されます.
App スイッチャーから終了しても良いですが, メモリ解放アプリでやった方が楽なこともあるでしょう.
主観ですが, 動作がモッサリする原因はSuspendedから消費する工程を踏む分だけ時間がかかってるのかもしれませんね.
いずれにしろ, 利用状況によっては特定の場面であると便利であるのは事実です.
〆
ということでこまめに削除する必要はないですが, たまには削除した方が良い…というのが実情です.
少なくとも頻繁に削除することはバッテリーにもメモリにも優しくありません.
一度ついたイメージはなかなか払拭できないのが現実…ということがこの一事をもっても感じ取れますね.