質問: iphoneのマルチタスクとかバックグラウンド起動 iphone (ios4.3)を使っています。 アプリの件でマルチタスクとかアプリがバックグラウンドで起動しているという状態の意味 について質問があります。 具体的には「yahoo!メッセンジャー」「スカイプ」や「ツイキャス」などです。 例えばyahoo!メッセンジャーアプリを起動させログイン後、いったんiphoneのホームボタンを押します。 この状態というのがアプリがバックグラウンドで起動している。ということですよね? そこで、ホームボタンをダブルタップするとアプリの使用履歴が画面下に出ると思いますが、 この履歴から先ほどのyahoo!メッセンジャーアプリを長押しさせてブルブルさせたあと 消去してみましたが、相手からプライベートメッセージを受けるとアプリからの通知 が来るので履歴を消してもアプリは終了してないんじゃないかと思います。 履歴アイコンを消去するかiphoneを再起動すればアプリが使用しているメモリが解放され アプリは終了されると思っていました。どうも勘違いしているようです。 アプリが終了(バックグラウンドで待機していない)されれば、アプリからの通知は受けないと思うし、オフライン(ログアウトされた状態)になると思うのですよね。 また、iphoneを再起動してもメッセンジャーアプリからログアウトしない限り 相手からプライベートメッセージを受けると通知がきます。 つまりいったんログインしたらiphoneを再起動しようが履歴を消去しようが相手にはオンラインのまま です。 これはiphoneを再起動しても履歴を消去してもアプリは終了せずバックグラウンドで待機していることを意味するんですかね? アプリを完全に終了させる方法はないのでしょうか? 長々とすいません。
回答: これは、それぞれのアプリは起動するとある処理をずら~っと実行して終了する、というようなイメージでプログラムの実行を捉えているために、バックグラウンド処理というのが「アプリそのものがバックグラウンドで動いている」というような思い込みがあるため、妙なカンジがするのでしょう。 >例えばyahoo!メッセンジャーアプリを起動させログイン後、いったんiphoneのホームボタンを押します。 >この状態というのがアプリがバックグラウンドで起動している。ということですよね? 微妙に違います。それは、「アプリを終了してもよい状態にしている」ということです。ホームに戻ると、それぞれのアプリは基本的に動作を停止し、いつでも終了できるものとされます。二度押しして出てくるアイコンを消すのは、ただ単に「履歴を整理する」というだけで、アプリの実行に何らかの影響を与えるものではありません。 では、アプリはいつ終了しているのか。これはシステムが必要に応じて、です。メモリが足りなくなったりすると、システムは終了できる状態のアプリを随時終了していきます。この際、最後の状態を保存するリジューム処理を呼び出します。そして次にアプリを起動したとき、リジュームされた状態に戻します。このため、多くのアプリは、まるで終了しないでバックグラウンドでずっと待っていたかのように振舞うのです。 つまり、iosでは、ユーザーが明示的にアプリを終了させることはできないのです。ただ、「そう見せている」だけで、すべてはシステムが管理しており、ユーザーはタッチできません。ですからiosの機能としては「完全に終了させることはできない」ということです。ただ、実行しているアプリをすべてチェックし、それらを強制的に終了させるユーティリティアプリなどはありますから、そうしたものを使えば可能でしょう。「標準機能にはない」ということですね。 では、バックグラウンドで実行するアプリはどうなっているのか。これは、そのプログラムのメインスレッドとは別に、バックグラウンドで実行し続ける処理を用意し、登録してあるのです。アプリが背後に回ったとき、この処理部分だけは終了せずに動き続けるのです。 プログラムというのは、同時にいくつもの処理を並行して実行し続けることができます。ですから、これは「メイン処理は終了しているが、それとは別の処理がバックグラウンドで実行し続けている状態」といってよいでしょう。ですから、アプリを終了した(と思っている)後も動いているのですね。