広告を閉じる

iOS でのマルチタスクの仕組みを知らない人はまだたくさんいます。ただし、最初に、これは本当のマルチタスクではなく、システムやユーザーに負担をかけない非常に賢いソリューションであることを指摘する必要があります。

iOS のバックグラウンドで実行されているアプリが動作メモリをいっぱいにし、システムの速度低下やバッテリー寿命につながるため、ユーザーはアプリを手動でオフにする必要があるという迷信をよく耳にします。マルチタスク バーには実際には、実行中のすべてのバックグラウンド プロセスのリストが含まれるのではなく、最近起動されたアプリケーションのみが含まれます。したがって、ユーザーは、いくつかの場合を除いて、バックグラウンドで実行されているプロセスについて心配する必要はありません。ホーム ボタンを押すと、通常、アプリケーションはスリープ状態になるか閉じられ、プロセッサやバッテリーに負荷がかからなくなり、必要に応じて必要なメモリが解放されます。

したがって、数十のプロセスが実行されている場合、これは本格的なマルチタスクではなく、常に 1 つのアプリケーションだけがフォアグラウンドで実行され、必要に応じて一時停止または完全にオフになります。少数の二次プロセスのみがバックグラウンドで実行されます。そのため、iOS ではアプリケーションのクラッシュが発生することはほとんどありません。たとえば、Android では、ユーザーが対応しなければならないアプリケーションが実行されすぎています。これにより、デバイスの操作が不快になる一方で、起動やアプリケーション間の遷移が遅くなるなどの原因となります。

アプリケーションのランタイムの種類

iOS デバイス上のアプリケーションは、次の 5 つの状態のいずれかになります。

  • ランニング: アプリケーションが開始され、フォアグラウンドで実行されます
  • 背景: まだ実行中ですが、バックグラウンドで実行されています(他のアプリケーションを使用できます)
  • 一時停止中: まだRAMを使用しているが実行されていない
  • 非活性: アプリケーションは実行中ですが、間接的なコマンド (たとえば、アプリケーションの実行中にデバイスをロックした場合)
  • 走っていない: アプリケーションが終了したか、起動していません

邪魔をしないようにアプリがバックグラウンドに移行すると、混乱が生じます。ホームボタンを押すか、ジェスチャを使用してアプリケーション (iPad) を閉じると、アプリケーションはバックグラウンドに移行します。ほとんどのアプリは数秒以内に一時停止されます (アプリは iDevice の RAM に保存されるため、すぐに起動でき、プロセッサーにそれほど負荷がかからず、バッテリー寿命が節約されます)。アプリがメモリを使用し続けると、手動で削除して解放します。ただし、iOS が自動的に実行してくれるため、それを行う必要はありません。大量の RAM を使用するゲームなど、要求の高いアプリケーションがバックグラウンドで一時停止されている場合、iOS は必要に応じてそのアプリケーションをメモリから自動的に削除し、アプリケーションのアイコンをタップすることで再起動できます。

これらの状態はいずれもマルチタスク バーには反映されません。パネルには、アプリが停止、一時停止、またはバックグラウンドで実行されているかどうかに関係なく、最近起動したアプリのリストのみが表示されます。また、現在実行中のアプリケーションが [マルチタスク] パネルに表示されない場合もあります。

バックグラウンドタスク

通常、ホームボタンを押すとアプリケーションはバックグラウンドで実行され、使用していない場合は 10 秒以内に自動的に一時停止します。したがって、たとえばポッドキャストをダウンロードしている場合、システムはそれを実行中のアプリケーションとして評価し、終了を XNUMX 分遅らせます。遅くとも XNUMX 分後には、プロセスがメモリから解放されます。つまり、ダウンロードが完了するまでに XNUMX 分以内であれば、ホームボタンを押してダウンロードが中断されることを心配する必要はありません。

バックグラウンドで無期限に実行される

非アクティブな場合、システムはアプリケーションを 5 秒以内に終了します。ダウンロードの場合、終了は XNUMX 分間遅れます。ただし、バックグラウンドでの実行が必要なアプリケーションが少数あります。 iOS XNUMX でバックグラウンドで無期限に実行できるアプリの例をいくつか示します。

  • サウンドを再生し、しばらく中断する必要があるアプリケーション (通話中の音楽の一時停止など)、
  • あなたの位置を追跡するアプリケーション (ナビゲーション ソフトウェア)、
  • VoIP 通話を受信するアプリケーション。たとえば Skype を使用している場合、アプリケーションがバックグラウンドにあるときでも通話を受信できます。
  • 自動ダウンロード (ニューススタンドなど)。

タスク (バックグラウンド ダウンロードなど) を実行していない場合は、すべてのアプリケーションを閉じる必要があります。ただし、ネイティブのメール アプリなど、バックグラウンドで継続的に実行される例外もあります。バックグラウンドで実行している場合、メモリや CPU 使用率が占有されたり、バッテリー寿命が短くなったりします。

バックグラウンドでの無期限の実行が許可されているアプリは、音楽の再生から新しい Podcast エピソードのダウンロードまで、実行中に行うことは何でもできます。

前に述べたように、ユーザーはバックグラウンドで実行されているアプリを閉じる必要はありません。唯一の例外は、バックグラウンドで実行されているアプリがクラッシュするか、スリープから適切に復帰しない場合です。その後、ユーザーはマルチタスク バーでアプリケーションを手動で閉じることができますが、これが起こることはほとんどありません。

したがって、バックグラウンド プロセスはシステム自体が処理するため、一般にバックグラウンド プロセスを管理する必要はありません。だからこそ、iOS は非常に新鮮で高速なシステムなのです。

開発者の視点から

アプリケーションは、マルチタスクの一部として、合計 6 つの異なる状態に反応できます。

1.applicationWillResignActive

つまり、この状態は、アプリケーションが将来 (数ミリ秒以内に) アクティブなアプリケーション (つまり、フォアグラウンドのアプリケーション) としての役割を終えることを意味します。これは、たとえばアプリケーションの使用中に電話を受けるときに発生しますが、同時に、このメソッドはアプリケーションがバックグラウンドに移行する前にもこの状態を引き起こすため、これらの変化を考慮する必要があります。この方法は、たとえば、着信があるときに実行中のすべてのアクティビティを一時停止し、通話が終了するまで待機する場合にも適しています。

2.アプリケーションDidEnterBackground

このステータスは、アプリケーションがバックグラウンドに移行したことを示します。開発者は、このメソッドを使用して、必ずしもバックグラウンドで実行する必要のないすべてのプロセスを一時停止し、未使用のデータやその他のプロセスのメモリをクリアします (タイマーの期限切れ、ロードされたイメージをメモリからクリアするなど、必ずしも必要ではない、またはプロセスを閉じるなど)。アプリケーションがバックグラウンドで接続を完了することが重要でない限り、サーバーとの接続は可能です。アプリケーションでメソッドが呼び出されるとき、バックグラウンドで実行する必要がない部分がある場合は、基本的にアプリケーションを完全に一時停止するためにこのメソッドを使用する必要があります。

3. applicationWillEnterForeground

この状態は、最初の状態とは逆で、アプリケーションはアクティブ状態に戻ります。この状態は、スリープ状態のアプリがバックグラウンドから再開し、次の数ミリ秒以内にフォアグラウンドに表示されることを単に意味します。開発者は、アプリケーションがバックグラウンドにある間に非アクティブだったプロセスを再開するために、このメソッドを使用する必要があります。ユーザーがロードされたアプリケーションを再度表示する直前に、サーバーへの接続を再確立し、タイマーをリセットし、画像とデータをメモリにロードし、その他の必要なプロセスを再開する必要があります。

4.アプリケーションがアクティブになった

この状態は、アプリケーションがフォアグラウンドに復元された後にアクティブになったばかりであることを示します。これは、ユーザー インターフェイスに追加の調整を行ったり、UI を元の状態に復元したりするために使用できるメソッドです。これは実際には、ユーザーがすでにディスプレイ上にアプリケーションを表示している瞬間に行われるため、この方法と前の方法で何が起こるかを慎重に判断してください。これらは数ミリ秒の差で次々に呼び出されます。

5.アプリケーションは終了します

この状態は、アプリケーションが終了する数ミリ秒前、つまりアプリケーションが実際に終了する前に発生します。マルチタスクから手動で行うか、デバイスの電源をオフにするときに実行します。このメソッドは、処理されたデータを保存し、すべてのアクティビティを終了し、不要になったデータを削除するために使用する必要があります。

6. applicationDidReceiveMemoryWarning

最も議論されているのは最後の状態です。アプリケーションがシステム リソースを不必要に使用する場合、必要に応じてアプリケーションを iOS メモリから削除します。 iOS がバックグラウンド アプリで具体的に何をしているのかはわかりませんが、アプリが他のプロセスにリソースを解放する必要がある場合、アプリが持っているリソースをすべて解放するようにメモリ警告を表示します。したがって、このメソッドはアプリケーションで呼び出されます。開発者は、アプリケーションが割り当てられたメモリを放棄し、進行中のすべてを保存し、メモリから不要なデータを消去するなど、メモリを適切に解放するようにこれを実装する必要があります。確かに、多くの開発者は、たとえ初心者であっても、そのようなことについて考えたり理解したりしていないため、アプリケーションがバッテリ寿命を脅かしたり、バックグラウンドであってもシステム リソースを不必要に消費したりする可能性があります。

評決

これら 6 つの状態とそれに関連するメソッドは、iOS におけるすべての「マルチタスク」の背景です。これは、アプリケーションがユーザーのデバイス上で何を引き起こすか、デバイスが最小化されたり、システムから警告を受けたりした場合などに責任を負う必要があるという事実を開発者が無視しない限り、これは素晴らしいシステムです。

ズドルイ: Macworld.com

著者: ヤクブ・ポジャレク、マルティン・ドゥーベック (ArnieX)

 
あなたにも解決すべき問題はありますか?アドバイスが必要ですか、それとも適切なアプリケーションを見つけますか?セクション内のフォームからお気軽にお問い合わせください カウンセリング, 次回はあなたの質問に答えます。

.