9

私はこれらの2つの状態について少し混乱しています。以下は私の理解です。

"Application does not run in background"アプリがバックグラウンドにあり、アプリの plist ファイルで NO に設定されている場合、アプリはバックグラウンドで実行され続けます。サスペンド モードでは、アプリはメモリ内にとどまりますが、コードは実行しません。システムはアプリが一時停止状態に移行したときにアプリに通知せず、メモリ不足の状況でアプリをメモリから消去して、フォアグラウンド アプリ用のスペースを作成します。

私の理解は正しいですか?そうである場合、アプリをバックグラウンドで実行してコードを実行しているときに、コンソールに NSLog を出力しないのはなぜですか? サーバーから継続的にデータを取得している TCP ソケット接続は実際にどうなりますか? とにかく、メモリ不足の状況でシステムが最終的にアプリをメモリから消去するため、サスペンド状態が必要なのはなぜですか。アプリが一時停止状態からアクティブになるか、最初からやり直すことに違いはありますか?

4

3 に答える 3

8

IOS アプリ プログラミング ガイドの セクション「アプリの状態とマルチタスク」を参照してください。「App States and Multitasking」という語句と「Hits Must」項目を「Match Search Term」に設定して Xcode ドキュメントを検索することで、それを見つけます。もう 1 つの便利な検索フレーズは、「background execution」です。

要約すると、アプリケーションがバックグラウンドで無期限に「実行」し続けることができる理由は限られています。

iOS では、特定の種類のアプリのみがバックグラウンドで実行できます。

  • 音楽プレーヤー アプリなど、バックグラウンドでユーザーに可聴コンテンツを再生するアプリ
  • ナビゲーション アプリなど、常にユーザーに現在地を知らせるアプリ
  • Voice over Internet Protocol (VoIP) をサポートするアプリ
  • 新しいコンテンツをダウンロードして処理する必要がある Newsstand アプリ
  • 外部アクセサリから定期的にアップデートを受信するアプリ

これらの特定の操作とは別に、アプリは、ドキュメントの「バックグラウンドでの有限長タスクの実行」セクションで説明されている非常に短い時間実行を継続するように要求できます。しばらくすると、アプリがシステムに完了を通知する (その後中断される) か、強制的に終了します。詳細はドキュメントをご覧ください。

そのドキュメントのもう 1 つの便利な部分は、素敵な状態図とともに、「アプリの状態変更の管理」セクションです。そのセクションでは、バックグラウンドに入り、フォアグラウンドに戻ることについて説明しています。新たに開始することと、一時停止状態から開始することの違いについての質問に答える必要があります。短い(正確ではない)答えは、サスペンド状態から開始し、バックグラウンドに入る、またはフォアグラウンドに(再)入るときに特別なアクションを実行しない場合、多かれ少なかれ元の場所から続行するということです。 . また、サスペンド状態からの起動の方が早いです。私の言い換えよりもはるかに優れていると書かれているので、ドキュメントを読んでください。

于 2013-02-26T15:23:33.300 に答える
3

アプリの状態

実行されていません:アプリは起動前にこの状態にあります。

アクティブ:アプリが開始されると、イベントを受け取ります。

非アクティブ:アプリが実行されているときに、電話などでアプリが中断されると、アプリは非アクティブになります。非アクティブとは、アプリがまだフォアグラウンドで実行されているが、イベントを受信して​​いないことを意味します。

バックグラウンド:この状態では、アプリはフォアグラウンドではなくなりましたが、コードを実行することはできます。

一時停止:コードを実行できなくなった場合、アプリはこの状態になります。

于 2016-04-06T13:10:19.013 に答える