質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

2回答

7489閲覧

アプリが「終了」するタイミングについて

interpiamobile

総合スコア66

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

2クリップ

投稿2016/02/05 04:51

アプリが終了するタイミングについてわからないことがあるので質問させていただきます。
そもそもアプリが終了するということについてよくわかりません。
iPhoneアプリを起動させたり以下の記事を読んだりしている内にだんだんもっと分からなくなってきました。

今更聞けない、iOSのマルチタスクの仕組みについて解説しておく

まず何かのiPhoneアプリを起動して遊んでいたとします。そしてホームボタンを押すと、それから5秒以内にはアプリは終了すると上の記事に書いているのですが、「Not running」が一般的にアプリを終了しているという状態でしょうか?それとも「Suspended」が終了という状態でしょうか?
「Not running」と「Suspended」の違いはメモリを確保してるかしてないかだけで、どちらもアプリは動作してないのでどちらもアプリを終了している状態ということでよろしいでしょうか?
今まで単にホームボタンを押すとアプリをバックグラウンドで実行をさせる状態にし、マルチタスク画面からアプリを上にフリックするとアプリが終了するのだと思っていたのですが、上の記事を読むとそうでないことが分かってきました。
しかし、例えばiPhoneにデフォルトで備わっている連絡先アプリを起動して誰かの連絡先情報を編集していたとします。この時にホームボタンを押してホーム画面に遷移し、5秒以上経ってからマルチタスク画面を起動して先ほどの連絡先アプリを起動すると、いきなり先ほどの編集画面からアプリがスタートすると思います。
次に今度は編集中にホームボタンを2回押してマルチタスク画面を起動して連絡先アプリを上にフリックしてマルチタスクから削除します。そしてホーム画面がら連絡先アプリを起動すると、編集画面からの起動ではなく連絡先一覧(つまり一番最初の画面)から起動すると思います。
両方ともホームボタンを押したことで状態が「Suspended」になっていると思います。なのになぜ次回の起動で最初に表示される画面が違うのでしょうか?どちらもアプリが終了しているので、どちらも一番最初の画面から起動されるべきだと思うのですが...。
ということはマルチタスク画面からアプリを上にフリックして削除すると、アプリは「Not running」になるのでしょうか?
そしてホームボタンを1回押しただけだと、アプリは「Suspended」になるのでしょうか?
まとめると、ホームボタンを1回押してホーム画面に遷移するとアプリはメモリを確保したまま終了し、マルチタスクから上にフリックしてアプリを削除した場合はメモリを開放してアプリを終了するということでよろしいでしょうか?

また、以前アプリを使っていてある情報を取得した後にアプリ全体の情報を更新するためにリフレッシュボタンを押すかマルチタスクを起動してそのアプリを上にフリックしてからもう一度そのアプリを開いて情報を更新していたのですが、情報を取得後にホームボタンを2回押してマルチタスクを起動した後にもう一度ホームボタンを押してそのアプリに戻ると情報が更新されていました。ということは、一回でもホームボタンが押されるとiOSではアプリの状態が最新に更新されるようになっているのでしょうか?(それともそのアプリにそういう処理が書かれていただけ?)

どなたかこの辺に詳しい方がいれば教えていただきたいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Suspendedは一時停止状態なので、終了とは異なります。
終了した場合は次回起動時に最初から起動する必要がありますが、一時停止状態では続きから再開されます(アプリによっては定期的にBackground状態になって動作することもあります)。

ただ、続きから再開されるといっても、ネットワーク接続をするアプリケーションなどは、一時停止の間にネットワーク先などで変化があると予想されるので、再開時にそれを考慮した処理が必要になります。

大元の記事では、CPUを使用しているかどうか(バッテリーを消費するかどうか)の観点で書かれていますので、SuspendedとNot Runningが同じように見えるだけですね。

投稿2016/02/05 07:21

AOKINAO

総合スコア268

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

interpiamobile

2016/02/08 01:23

ご回答ありがとうございます。「終了した場合は次回起動時に最初から起動する必要があります」とのことですが、この終了した場合というのがマルチタスクからアプリを上にフリックしてアプリがマルチタスクから消えた状態のことでしょうか?ということは以下のような理解でよろしいでしょうか? ・ホームボタンを押す → Background → 数秒たったらアプリが一時停止する(Suspended) ・マルチタスクを起動してアプリを上にフリックする → アプリが終了する(Not Running)
AOKINAO

2016/02/08 04:38 編集

 ご理解のとおりです。  ちなみに、マルチタスク画面は、過去に起動したアプリの履歴としての機能も持っていますので、マルチタスク画面に表示されていないならNot Runningですが、表示されていてもSuspendedとは限りません(例えば、iOS端末の再起動後は、各アプリはNot Runningですが、マルチタスク画面に履歴として残っています)。
interpiamobile

2016/02/08 04:57

なるほど、やっとスッキリしました! 確かにiPhoneを再起動した後アプリがマルチタスク画面に残っているのを見たことがありますが、あれはNot Runningなのですね。(知らなければまたどこかで混乱してたと思います^^;)この度は誠にありがとうございました。
guest

0

アプリ起動、ホームボタン、アプリはサスペンド状態へ移行
アプリ起動、ホームボタンダブルクリック、タスク一覧から該当アプリフリック、アプリ強制終了

サスペンド状態のアプリでも優先実行される権利が剥奪されている状態というだけでコッソリ動作しています。
アプリが起動され、画面に表示中の状態では、アプリはサスペンドしてる他のアプリよりも優先して実行されます。
サスペンドモードイベント、強制終了イベント、サスペンド復帰イベント、初回起動イベントをハンドルし、各タイミングでアプリの初期化、復帰方法は各アプリに委ねられます。

クラッシュオブクランなどは、サスペンド復帰時は必ずオープニングから復帰ですよね。
でも、一瞬だけサスペンドして画面をアクティブにしただけならサスペンドに移行した最後の画面状態で復帰します。時間管理を自前でやってて、何かしらのるーるに適合しない場合はすべてオープニングから起動しなおすという仕掛けになってるのででょうね。

サファリのようなタブブラウザは、タブ変えただけでサスペンドのイベントが走るようです。別タブで2-3回検索したりページ閲覧して、元のタブに戻るとリロードされたり、タブ切り替え直前の画面を保持してたり、様々です。ログインするタイプの画面だと、いつの間にかリロードされてしない、セッションがきれてしまうこともあります。

ということで、あぷりの作り次第ということで。サーバ処理と連携するアプリがほとんどですが、サスペンド復帰時と初回起動時は、一部処理が重なるんででょう。重なった場所がオープニングタイトル表示なら、アプリを再起動する必要がある、状態だったということ。

パズドラなども、サスペンドが長いとなるのか不明ですけど、サスペンド復帰時にオープニングから始まる場合があります。スタミナが増減するだけだから操作するがわとしては再起動しなくてもいいんじゃね?と思うのですが、再起動する必要があるからそうなった、と解釈すべきででょう。

投稿2016/02/05 06:47

ipadcaron

総合スコア1693

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

interpiamobile

2016/02/08 01:18

ご回答ありがとうございます。 なるほど、サスペンドなどのタイミングでの処理は各アプリに委ねられており、アプリによってマチマチなのですね。サスペンドは終了というよりはバックグラウンドで動作しているような感じでしょうかね?(サスペンドとバックグラウンドの違いがややこしいです)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問