2008年11月24日月曜日

iPhoneのメモリー管理(アプリ管理?)の不思議

iPhone SDKのドキュメント(日本語版)の「iPhone OS プログラミングガイド」を読み進めるうちに、「あれ?」という記述に出会いました。
--- iPhone OS プログラミングガイドより引用 ---
ユーザが、ホーム(Home)ボタンを押すか、別のアプリケーションのコンテンツを開く機能を使用するかして、アプリケーションのコンテキストを離れる場合は、iPhone OSがアプリケーションに終了を通知します。そのときは、未保存の変更をディスクに保存し、できるだけすばやく終了する必要があります。アプリケーションの終了に5秒以上かかると、即座に強制終了させられることがあるからです。
------

アプリを完全に終了しメモリーを解放する方法」で書きましたけど、iPhoneのアプリて、[ホーム]ボタンを押しても、裏に回って動作が停止するだけで、終了せずにメモリーに残ったままになるんじゃなかったっけ?

Safariの実際の挙動とか見てると、どう考えても、[ホーム]ボタン押下でアプリが終了しているとは思えないんだけどなぁ?


実際、どうなっているのか、「Memory Statusiconという、iPhoneのメモリー使用状況とプロセス一覧を表示できるアプリを使って調べてみました。

結論を先に書くと、次のようになります。
  • 通常のアプリ(電話、メール、Safari、iPod以外のアプリ)は、[ホーム]ボタン押下で終了し、メモリーも解放されます。
  • 電話、メール、Safari、iPodは、[ホーム]ボタンを押下しても、裏に回って待機状態になるだけで終了しません。メモリーも確保したままです。

つまり、メールやSafariのような、一部のアプリだけが特別だったわけなんですが、気が付きませんでした(^^;)。

以下、調査結果の詳細です。

まず、iPhone起動直後のメモリーの状態です。グリーンの部分がフリーメモリーですが、40%以上の空きがあります。
# 逆に見ると、起動直後ですら60%もメモリーが消費されてる、てことになるんですが・・・。


次にSafariを起動して、数ページブラウズした後で、普通に[ホーム]ボタンを押してSafariを終了し、ホーム画面に戻ってみました。その時のメモリーの状態です。
 
見ての通り、フリーメモリーが約3%まで減少してしまっています。また、プロセス一覧の方を見ると、きっちり、Safariが表示されています(つまり、Safariは終了していません)。


今度はGoogleマップを起動して、同様に[ホーム]ボタン押下で終了してみました。なぜか、Googleマップ起動前よりフリーメモリーが増えています(フリーメモリー約15%)。
 
どうやら、Googleマップの起動の際に、割り当て済みメモリーの一部が解放されて、Googleマップに割り当て直され、その後、Googleマップの終了とともに開放されたことでフリーメモリーが増える、という結果になったようです。

プロセス一覧にもGoogleマップは表示されていませんので、Googleマップは確かに、[ホーム]ボタン押下で終了し、メモリーも解放されたようです。ただし、Safariは相変わらず、居座ったままです(^^;)。


もう一度、Googleマップを起動し、今度は[ホーム]ボタン長押しで強制終了してみました。[ホーム]ボタン長押しにより、ガベージコレクション的な動作(裏に居座ったSafariの終了又は確保したメモリーの解放)が行われるかを見るためですが、普通に[ホーム]ボタンを押した場合となんら変わりありませんでした。
 

最後に、再度、Safariを起動し、[ホーム]ボタン長押しで強制終了してみました。見ての通り、iPhone起動直後とほぼ同じ状態まで、フリーメモリーが回復しています(フリーメモリー約43%)。プロセス一覧からもようやく、Safariの姿が消えました。
 

結局、iPhoneのメモリー不足の元凶(^^;)は、“Safari”だと再認識させられる結果になったわけですが、電話、メール、iPodはともかく、どうして、Safariが半常駐型になってるんでしょうね? Internet Explorer同様、OSの一部、というスタンスなんでしょうか。

ともあれ、iPhoneでメモリー不足の兆候(動作が緩慢になる、アプリがこける等)が現れた場合は、Safariを起動し、[ホーム]ボタン長押しで強制終了するのが効果的なようです。
# というか、Safari以外のアプリを強制終了しても意味が無いわけで。

あるいは、いっそのこと、Safariは常に[ホーム]ボタン長押しで強制終了させるくせをつけるとか(^-^;)。

関連する記事

0 コメント:

BlogPeople People