--- iPhone OS プログラミングガイドより引用 ---
ユーザが、ホーム(Home)ボタンを押すか、別のアプリケーションのコンテンツを開く機能を使用するかして、アプリケーションのコンテキストを離れる場合は、iPhone OSがアプリケーションに終了を通知します。そのときは、未保存の変更をディスクに保存し、できるだけすばやく終了する必要があります。アプリケーションの終了に5秒以上かかると、即座に強制終了させられることがあるからです。
------
「アプリを完全に終了しメモリーを解放する方法」で書きましたけど、iPhoneのアプリて、[ホーム]ボタンを押しても、裏に回って動作が停止するだけで、終了せずにメモリーに残ったままになるんじゃなかったっけ?
Safariの実際の挙動とか見てると、どう考えても、[ホーム]ボタン押下でアプリが終了しているとは思えないんだけどなぁ?
実際、どうなっているのか、「Memory Status」
結論を先に書くと、次のようになります。
- 通常のアプリ(電話、メール、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 コメント:
コメントを投稿