見出し画像

AndroidとiOSでマルチタスクが実際に機能する仕組み

音楽を聴きながらSNSを扱うなどのように、多くの方々はAndroid又はiPhoneに対してマルチタスク処理を行わせています。これらは中核的な機能ですが、その仕組みを理解している方はごく少数に留まるでしょう。その現状を鑑み、今回はそれらの仕組みについて御紹介致します。

モバイル機器に搭載される馬力がますます大きくなるにつれて、よりフル機能のマルチタスク処理が可能になります。 マーケットリーダーは物事を進める方法がまったく異なり、舞台裏で何が起こっているかについて多くの誤解があります。 ただし、これはユーザーのせいではありません。 使いやすさのために、AndroidとiOSの両方でマルチタスクのメタファーが過度に単純化される場合があります。
iOS:

iOS 4以来、Appleのプラットフォームでは、ホームボタンをダブルタップすることでアクセスできるマルチタスク機能が限られていました。 マルチタスクバーは画面の下部に表示され、アプリを切り替えることができます。 アイコンを長押しすると、ユーザーはマルチタスクバーからアプリを削除できます。 これにより、リソースを浪費しているバックグラウンドアプリが終了していると思われるかもしれませんが、そうではありません。

Appleは、マルチタスクバーをバックグラウンドで実行されているアプリではなく、最近のアプリのリストにすることのみを意図していました。どのように見えても、タスクマネージャではありません。実際、マルチタスクバーのほとんどが真の「マルチタスク」ではありません。 Appleの厳重に管理されたプラットフォームは、ほとんどのアプリに、ホームボタンが押されたときにコードの実行を停止するよう指示します。

iOSのアプリアクティビティには5つの状態がありますが、最も興味深いのは実行されていないことと非アクティブです。実行されていないということは、単にアプリが閉じているか起動されていないことを意味します。非アクティブは、コードが実行されていない実行中のアプリです。たとえば、デバイスがスリープ状態の場合です。アクティブは、使用されているフォアグラウンドにあるアプリの状態です。

iOSユーザーがホームボタンを押すと、アクティブなアプリがバックグラウンドに移動します。バックグラウンドアプリは画面上にありませんが、コードを実行しています。ほとんどのバックグラウンドアプリはすぐに一時停止モードに切り替わります。中断されたアプリはメモリにキャッシュされますが、プロセッササイクルを使用しないため、デバイスでコードを実行しません。デバイスがゲームやその他の大きなアプリのためにより多くのメモリを必要とする場合、中断されたアプリはRAMから消去されます。

アプリは、特定の状況でバックグラウンドタスクを維持し、数秒以上コードを実行することのみ許可されます。厳しく制御された一連のAPIにより、VoIP、ロケーショントラッキング、オーディオ再生などのバックグラウンドを無期限に設定できます。これはいずれも、マルチタスクバーの内容には影響しません。適切に作成されたアプリは、コードの実行が終了すると自動的に停止し、ユーザーはiOSでそのようなことを実際に監視する必要はありません。

Android:

Googleは、Android 4.0 Ice Cream Sandwichでのマルチタスクへのアクセス方法にかなり重要な変更を加えました。新しい最近のアプリリストでは、カードのようにアプリをスワイプしてリストから削除できます。 iOSの場合と同様に、これはユーザーにタスクを管理しているという感覚を与える傾向があります。メモリを解放します。ただし、ここではAppleのプラットフォームと同様に間違っています。

最近のアプリのリストは、サムネイル付きの最近のアプリのリストです。リストにあるからといって、アプリが実際にコードを実行しているという保証はありません。ユーザーがホームボタンを押しても、アプリはiOSの一時停止モードに似たものをすぐには入力しません。 Androidアプリに関連付けられたプロセスはバックグラウンドのままであり、必要な作業を実行できます。 Androidのアプリは複数のプロセスを使用する場合があり、複数のアプリが単一のプロセスを共有できます。

ユーザーが残したアプリに戻りたい場合、プロセスはほとんど瞬時にフォアグラウンドアプリとして復元されます。完璧な世界では、Androidデバイスがメモリを使い果たすことはなく、これらのプロセスはすべてRAMに永久に住むことができます。これは現実の世界であり、デバイスはおそらくある時点でRAMが不足するでしょう。その場合、iOSとほぼ同じです。システムはプロセスを強制終了し、カーネルはリソースを回収します。次回ユーザーがそのアプリを開くときに、完全にリロードする必要があります。このアプリはまだ最近のアプリリストに含まれている可能性がありますが、プロセスがバックグラウンドで実行されているかどうかには関係ありません。

Androidの最近のイテレーションでは、プラットフォームはタスクの管理に関してはるかにスマートになりました。システムをスムーズに実行し続けるためにタスクマネージャを使用する理由はまったくありません。実際、これはAndroidの自動プロセス監視に干渉する可能性があります。開発者には、バックグラウンドでコードを明示的に実行し、予期せずにコードが停止しないようにする2つの方法があります。手動のタスクマネージャーが干渉します。

Androidアプリがバックグラウンドで強制終了されないようにする方法は、限られたバックグラウンドAPIを備えたiOSでも同様です。 BroadcastReceiversコンポーネントを使用すると、アプリを短時間起動して、何らかのタスクを実行した後、バックグラウンド状態に戻すことができます。これは、場所のチェックインまたはファイルの同期に役立ちます。

バックグラウンドでアプリを強制的に維持するもう1つの方法は、サービスコンポーネントです。サービスとして実行されているアプリは無期限に実行でき、システムによって殺されることはほとんどありません。これが、Androidマルチタスクをユニークにするものです。通常のプロセスはサービスの前に終了し、開発者は「フォアグラウンド」として実行することでサービスの重要性をさらに示すことができますが、これには通知アイコンが通知バーに永続的に表示される必要があります。この動作は、ロケールなどの自動化アプリと音楽の再生で確認できます。
それはコントロールについてであり、あなたはあまり持っていません

iOSでもAndroidでも、オペレーティングシステムはほとんどのタスク管理を行います。 iOSでは、ユーザーがタスクを実行することを真剣に許可することはありませんでしたが、現在でも、アプリが数秒以上、非中断バックグラウンドプロセスとして存在する必要がある理由を開発者に非常に明確に宣言させることがあります。中断されたプロセスは必要に応じて強制終了され、最近のアプリバーはそれとは何の関係もありません。

また、Androidは不要になったプロセスを終了しますが、開発者に舞台裏で実行する方法をいくつか提供します。アプリに関連付けられたプロセスは、バックグラウンドで必要なコードを自由に実行できますが、メモリが制限されている場合、いつでも終了できます。ただし、BroadcastReceiver又はServiceを実行することで、アプリにもう少し機能を追加できます。洗練された最新のアプリインターフェースを備えたAndroid 4.0でも、アプリを削除しても、基盤となるプロセスが強制終了されることはありません。それはシステム次第です。

本内容が、皆様の今後の生活の一助となれば幸いです。


この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

Thank you for pushing like button !
Software Developer/Programmer/Penetration Tester JavaScript/PHP/Python etc...
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。