質問: アプリが終了するタイミングについてわからないことがあるので質問させていただきます。 そもそもアプリが終了するということについてよくわかりません。 iPhoneアプリを起動させたり以下の記事を読んだりしている内にだんだんもっと分からなくなってきました。 今更聞けない、iOSのマルチタスクの仕組みについて解説しておく まず何かのiPhoneアプリを起動して遊んでいたとします。そしてホームボタンを押すと、それから5秒以内にはアプリは終了すると上の記事に書いているのですが、「Not running」が一般的にアプリを終了しているという状態でしょうか?それとも「Suspended」が終了という状態でしょうか? 「Not running」と「Suspended」の違いはメモリを確保してるかしてないかだけで、どちらもアプリは動作してないのでどちらもアプリを終了している状態ということでよろしいでしょうか? 今まで単にホームボタンを押すとアプリをバックグラウンドで実行をさせる状態にし、マルチタスク画面からアプリを上にフリックするとアプリが終了するのだと思っていたのですが、上の記事を読むとそうでないことが分かってきました。 しかし、例えばiPhoneにデフォルトで備わっている連絡先アプリを起動して誰かの連絡先情報を編集していたとします。この時にホームボタンを押してホーム画面に遷移し、5秒以上経ってからマルチタスク画面を起動して先ほどの連絡先アプリを起動すると、いきなり先ほどの編集画面からアプリがスタートすると思います。 次に今度は編集中にホームボタンを2回押してマルチタスク画面を起動して連絡先アプリを上にフリックしてマルチタスクから削除します。そしてホーム画面がら連絡先アプリを起動すると、編集画面からの起動ではなく連絡先一覧(つまり一番最初の画面)から起動すると思います。 両方ともホームボタンを押したことで状態が「Suspended」になっていると思います。なのになぜ次回の起動で最初に表示される画面が違うのでしょうか?どちらもアプリが終了しているので、どちらも一番最初の画面から起動されるべきだと思うのですが...。 ということはマルチタスク画面からアプリを上にフリックして削除すると、アプリは「Not running」になるのでしょうか? そしてホームボタンを1回押しただけだと、アプリは「Suspended」になるのでしょうか? まとめると、ホームボタンを1回押してホーム画面に遷移するとアプリはメモリを確保したまま終了し、マルチタスクから上にフリックしてアプリを削除した場合はメモリを開放してアプリを終了するということでよろしいでしょうか? また、以前アプリを使っていてある情報を取得した後にアプリ全体の情報を更新するためにリフレッシュボタンを押すかマルチタスクを起動してそのアプリを上にフリックしてからもう一度そのアプリを開いて情報を更新していたのですが、情報を取得後にホームボタンを2回押してマルチタスクを起動した後にもう一度ホームボタンを押してそのアプリに戻ると情報が更新されていました。ということは、一回でもホームボタンが押されるとiOSではアプリの状態が最新に更新されるようになっているのでしょうか?(それともそのアプリにそういう処理が書かれていただけ?) どなたかこの辺に詳しい方がいれば教えていただきたいです。よろしくお願いします。
回答: アプリ起動、ホームボタン、アプリはサスペンド状態へ移行 アプリ起動、ホームボタンダブルクリック、タスク一覧から該当アプリフリック、アプリ強制終了 サスペンド状態のアプリでも優先実行される権利が剥奪されている状態というだけでコッソリ動作しています。 アプリが起動され、画面に表示中の状態では、アプリはサスペンドしてる他のアプリよりも優先して実行されます。 サスペンドモードイベント、強制終了イベント、サスペンド復帰イベント、初回起動イベントをハンドルし、各タイミングでアプリの初期化、復帰方法は各アプリに委ねられます。 クラッシュオブクランなどは、サスペンド復帰時は必ずオープニングから復帰ですよね。 でも、一瞬だけサスペンドして画面をアクティブにしただけならサスペンドに移行した最後の画面状態で復帰します。時間管理を自前でやってて、何かしらのるーるに適合しない場合はすべてオープニングから起動しなおすという仕掛けになってるのででょうね。 サファリのようなタブブラウザは、タブ変えただけでサスペンドのイベントが走るようです。別タブで2-3回検索したりページ閲覧して、元のタブに戻るとリロードされたり、タブ切り替え直前の画面を保持してたり、様々です。ログインするタイプの画面だと、いつの間にかリロードされてしない、セッションがきれてしまうこともあります。 ということで、あぷりの作り次第ということで。サーバ処理と連携するアプリがほとんどですが、サスペンド復帰時と初回起動時は、一部処理が重なるんででょう。重なった場所がオープニングタイトル表示なら、アプリを再起動する必要がある、状態だったということ。 パズドラなども、サスペンドが長いとなるのか不明ですけど、サスペンド復帰時にオープニングから始まる場合があります。スタミナが増減するだけだから操作するがわとしては再起動しなくてもいいんじゃね?と思うのですが、再起動する必要があるからそうなった、と解釈すべきででょう。