iOS4でバックグラウンド化されているアプリを確認する方法
iOS4から提供されているマルチタスク機能によって、アプリ実行中にホームボタンを押した時に、プロセスを終了させず、バックグラウンドで一時停止状態にすることができるようになっていることは、多くの方がすでにご存知だと思います。
PCとは異なり、バックグラウンドで一時停止状態になるのは、すべてのアプリではなく、開発者がそう振舞うよう、選択したものだけです。また、OS4から提供されている機能なので、OS3.x以前のバージョンをベースにしたアプリでは、今まで通り、ホームボタンを押せば、プロセスが終了されます。
iOS4では、ホームボタンをダブルクリックすると、「最近使ったアプリケーション」が参照できるようになっています。ただそこでは、あくまでも「最近使ったアプリケーション」がわかるだけで、そのプロセスがバックグラウンドに存在するかどうかまではわかりません。
この例では、右の3つはバックグラウンドで一時停止状態になっているプロセスですが、一番左のものは、すでに終了されています。でも、その区別はつきませんよね。この機能を「タスクマネージャ」と表現している記事もあるようですが、その認識は誤っています。あくまでも、「最近使ったアプリケーション」のアイコンが並んでいるだけです。
バックグラウンドプロセスとして存在しているか否かは、SysStats MonitorやSysStats Liteのようなアプリを使わないと、見ることができません。例えば、以下のようにプロセスの一覧を確認しながら、「最近使ったアプリケーション」を使って操作することができます。
「最近使ったアプリケーション」を長押しして、上記のような「-」を表示させた場合、アイコンを削除することができますが、そのアプリの状態よって、実際に行われることは異なります。
- バックグラウンド化されているもの
アイコンが削除されるとともに、プロセスが終了される - すでに終了しているもの
アイコンが削除されるのみ
こんな感じで調べてみると、Appleから提供されている標準アプリは、ほぼバックグラウンド化する設定になっていることがわかりました。
そのときに調べてみた結果を以下にまとめてみましたので、興味がある方は、参考にしていただければと思います。
注意事項
SysStats MonitorやSysStats Liteでは、OS3.x以前でバックグラウンド化されていたプロセスの名称は、事前に登録されていますが、それ以外のものは、「プロセスブックマーク機能」を使って1つずつ登録する必要があります。
iPhoneの空きメモリを少なくする方法
久しぶりの投稿です。
過去に何度か、空きメモリ不足に関する説明をしていますが、今回はちょっと切り口を変えてみました。
タイトルにあるように、わざわざ「空きメモリを少なくする」ということは、普通はやらないというか、望まれないことですが、アプリ開発時には必要な場面があります。
開発中のアプリが、空きメモリが少ない状態で、どのような振る舞いをするのかを確認したいようなケースがそれに該当します。
SDKに付属のiPhoneシミュレータでも、「メモリ警告をシミュレート」という機能はありますが、それは、あくまでも空きメモリ不足になったときにアプリに通知される警告が疑似的に出されるだけであり、本当の空きメモリ不足状態とは異なります。
空きメモリを少なくする
以下のことをやれば、見事に空きメモリを少なくすることができます。
その状態で、SysStats Liteでメモリの状況を見ると、以下のような状態になっていることが確認できます。
これで、空きメモリが少ない状態でのテストを、実機で行うことができると思います。
さらに、ここからは、以下のようなことがわかります。
- メモリを占有しているのは、紫色で示されている「その他」の領域であり、赤の「現在使用中」には、ほとんど変化がない。
- 長時間使っているから空きメモリが少なくなるのではなく、使い方の影響が大きい。
しばらく使っていると、OSのメモリリークなどで空きメモリが不足するみたいな誤解も多いですが、iPhoneOSは、そんなにショボくないと思います。
空きメモリが少ないときの挙動
特にマニュアルなどには明記されていませんが、いろいろ試してみたところでは、以下のような挙動になるようです。
空きメモリが少なくなると、OSからメモリ警告のメッセージが送られるのは、開発者の方なら、ご存知のことと思います。その警告を受けたら、アプリは確保しておくことが必須でないメモリ領域を解放することが義務づけられています。
それでも空きメモリが不足したままであれば、Safariやメールなどの常駐アプリに、終了指示が出され、それでも間に合わないときは、強制終了されます。
まだ、だめだという場合は、フォアグラウンドで動いているアプリが強制終了されます。
私が見る限りでは、メモリ不足でアプリが落ちるのは、急速に大きなメモリを確保しようとして、上記のような状況になったときだと思われます。当然その後は、充分な空きメモリができている状態になります(笑)。
空きメモリ復活の方法(余談)
iPhoneは、空きメモリが少ないからといって、必ずしも不調になるわけではないですが、どうしても空きメモリが少ないと落ち着かない方が多いようですね(笑)。
その場合は、標準のカメラアプリで写真を1枚撮ってみてください。見事に空きメモリが復活します。例えば、以下のような感じです。
でもまた、Safariやメールを使っているうちに、空きメモリはすぐに少なくなってきますので、それがいやだという場合は、Safari、メールなどの標準アプリを使わないようにするしか手はないと思います(苦笑)。
尚、これらは、iPhoneOS3.1.3で、実際に試したみた結果であり、iOS4では、このあたりの挙動は変わる可能性がありますので、ご注意ください。
以上、お役に立てば幸いです。
iPhoneの中で動いているプロセス
SysStats Monitor/SysStats Liteでは、iPhoneの中で動いているプロセスの一覧を表示しています。
バックグラウンドで動いている標準アプリのことは、これまでにも説明してきましたが、それ以外のものについては特に触れていませんでした。AppStoreのカスタマーレビューにも、説明してほしいという声があったので気になっていたところ、そのあたりをまとめてくれているいい記事を見つけたので紹介したいと思います。
http://yebo-blog.blogspot.com/2009/11/iphone-os.html
各プロセスの役割が、簡潔に説明されており、わかりやすくまとまっているのではと思います。
ここに出ているものは常駐しているものがほとんどですが、それ以外に必要なときに随時起動されるものがいくつかあるようです。私の方で観察していて見つけたものについて、以下に補足します。
コピー/ペースト操作をしたときに起動されるもの
- pasteboardd
位置情報を取得する操作をしたときに起動されるもの
- locationd
iPhoneをPCに接続すると起動されるもの
- ptpd
- afcd
- notification_pro
- installd
- mDNSResponderHel
- syslog_relay
興味がある方は、これらの操作をした直後に、プロセス一覧画面で確認してみてください。
ちょっとマニアックな内容でしたね。
長期間使用されているアプリに、選んでいただきました。
http://d.hatena.ne.jp/moto_maka/20091216/1260905228
長期間使っていると言ってくださるユーザさんがいるのは、開発者としてうれしいことですね。
ユーザのみなさま、記事をまとめていただいたid:moto_maka さん、ありがとうございます。
SysStats Monitor/Liteの「その他」領域について
SysStats Liteのカスタマーレビューにて、メモリ使用状況の「その他」領域について質問をいただいたようなので、それについて説明したいと思います。
技術的な観点では、
SysStats Liteの「測定できない領域」は、わかりにくいものですよね。 - The iPhone Development Playground
にて説明しているので、一部重複する内容もありますが、ご了承ください。
メモリ使用状況の円グラフに表示している数値は、iPhoneOSで提供されている標準機能を使って取得しています。そこでは、
- 固定中
- 現在使用中
- 現在非使用中
- 空き
の4つの領域のサイズが得られます。
これらの合計値を見ていて、以下のことに気づきました。
- 物理RAMサイズとこれらの合計値を比較すると、かなり差がある。
- 合計値は、変動する。
このことから、この合計値を母数とする円グラフは、変化を比較することには適さないと考えました。
さらに調べていくと、合計値の変動は、Safariなどの標準アプリが、バックグラウンドで起動されているかどうかに影響される傾向が見えてきました。
- Safariが起動されているときには、この合計値は少なくなる。
- Safariを終了させるとこの合計値が増える。
母数を物理RAMサイズとすることで、こういった変化を円グラフで把握することができています。
そして、その時に生じる物理RAMサイズと、前述の4つの領域の合計値の差分を「その他」としています。
このケースでは、主に「その他」の領域が解放され、「空き」が増えたということが見て取れると思います。
「その他」領域があるのは、このように円グラフの正確さを追求した結果であることをご理解いただければと思います。
SysStats LiteとSysStats Monitor 1.5がリリースされました。
今朝ほど、SysStats LiteとSysStats Monitor ver.1.5が、AppStoreにリリースされました。
変更点は、以下の通りです。
SysStats Liteを、SysStats Monitorの機能限定版として再構築しました。
アイコンとアプリ全体の見た目が大きく変わりましたのでご注意ください。
SysStats Monitorに、再起動履歴の保存と閲覧機能を追加しました。
iPhone/iPod touchのリセットや電源OFF/ONをしたときの日時を記録して、一覧表示することができます。
注:
- SysStats Monitorを起動したときに、直近の再起動日時を取得しています。SysStats Monitorを起動せずに次の再起動を行ったときには記録されませんのでご注意ください。
- 5分以内に複数回の再起動を行ったり、システムの時計の時刻を変更した直後は、正しく記録されないことがあります。
よろしくお願いいたします。
AppBankさんにSysStats Liteをご紹介いただきました
本日、TwitterのTLを見ていたら、自分のアプリであるSysStats Liteに関するつぶやきを見つけました。
あぷばんだよ! on Twitter: SysStats Lite: 現在のiPhoneのシステム稼働状況を表示する無料ユーティリティ。1905 http://ff.im/-csmBl
なんと、AppBankさんではないですか!
そのリンクをクリックしてみると、紛れもなくSysStats Liteがレビューされています。
SysStats Lite: 現在のiPhoneのシステム稼働状況を表示する無料ユーティリティ。1905 - たのしいiPhone! AppBank
リリースから1年ちょっと経過しており、最近ダウンロード数が減少傾向にあったのですが、今日は一気にV字回復し、無料アプリ全体のTOP100にまで返り咲くことができました。AppBankさんと、それを見てダウンロードしていただいたみなさまに感謝いたします。ありがとうございます。
それと同時に、1点お知らせしておきたいことがあります。
実は、SysStats Liteは、現在アップデートを申請しており、それがリリースされると、見た目やアイコンが大きく変わります。
具体的には、有料アプリであるSysStats Monitorの機能縮小版として再構築しました。なので、画面の雰囲気などは、SysStats Monitorと同じ感じになります。
現状のSysStats Liteと同等の機能を維持していますので、そのまま違和感なく使っていただけるのでは思っています。
通常の流れですと、来週にはアップデートがリリースされると思います。それ以降にダウンロードしていただくみなさまを、混乱させてしまうことがあるかもしれませんが、タイミングの問題という事情をご理解いただければと思います。
この日記を書いた翌朝(12/6)に、アップデートがリリースされました。ダウンロードしていただくユーザのみなさまを混乱させてしまうことがあるかもしれませんが、タイミングの問題という事情をご理解いただければと思います。
よろしくお願いいたします。