ほとんどのモバイルプラットフォーム(Android、iOS、Windows Phone 7、新しいWinRTなど)は、メモリ不足の下で非アクティブなアプリケーションプロセスを強制終了できます。これがユーザーエクスペリエンスに影響を与えるのを防ぐために、アプリケーションは、プロセスが強制終了されて再起動されたときに、状態を保存および復元することが期待されています。
この方法でアプリケーションプロセスを強制終了すると、開発者の仕事が難しくなります。
さまざまな場面で、次のようなモバイルアプリを見てきました。
これらのモバイルオペレーティングシステムがこのようにタスクを強制終了するように設計されている理由は、特にアプリケーション開発がより困難になり、エラーが発生しやすくなるため、よくわかりません。
デスクトップオペレーティングシステムは、そのようなプロセスを強制終了しません。未使用のメモリページを大容量記憶装置にスワップアウトします。同じアプローチがモバイルで使用されない理由はありますか?モバイルハードウェアは、パフォーマンスの点でPCハードウェアよりわずか数年遅れています。
モバイルオペレーティングシステムがこのように設計されているのには、非常に正当な理由があると確信しています。これらの理由を説明している論文やブログの投稿を教えていただければ、または洞察を与えていただければ幸いです。
ほとんどのユーザーにとって、スマートフォンの主な機能は電話としてであり、テキストメッセージの受信、および電子メールの受信がそれに続きます。スマートフォンOSの設計者は、アプリケーションがこれらの主要な機能に干渉しないようにする必要があります。
モバイルのもう1つの制約は、バッテリーの寿命です。バックグラウンドで「スピン」するアプリは、電流を消費してバッテリーの寿命を縮めます。スマートフォンOSの設計者は、現在使用されていないアプリケーションをスリープ状態にして、バッテリーの寿命を延ばす必要があります。
これは、WindowsPhoneプラットフォームでのこの機能に関する記事です。これが「必要な悪」である理由を説明することから始めます: モバイルの問題-Windows Phone 7のツームストーンニング
優れたモバイルプラットフォームは、モビリティがデバイスに課すハードウェアの制約を認識する必要があります。デスクトップと比較して、モバイルデバイスは、メモリ、処理能力、画面領域、およびバッテリ寿命が制限されています。これらの制約を合計すると、多くのアプリケーションが実行される非専用デバイスでは、他のアプリケーションがリソースを利用できるようにするために、アプリケーションが最終的に閉じられるかシャットダウンされると結論付ける必要があります。
デスクトップOSでも、プロセスを完全に休止状態にして目覚めさせるのは簡単な作業ではありません。メモリページとは別に、プロセスが正しく動作するには、ネットワーク接続、ローカルファイル、ロック、セマフォなどの他のリソースが必要です。考慮する必要のあるすべての種類のカーネル/ユーザースペースオブジェクト。そして、リストは増え続けています。これは、アプリがダンプと復元の問題を自分で処理する必要がある理由に答えると思います。
それで、アプリの状態を永続的に保存するために無限の量のスワップスペースが必要ですか?ユーザーがメモリカードをインストールすることさえ保証できないので、23時間前に読み込まれ、30秒間実行され、2Mbのデータが生成されたアプリの状態をどこに保存することを提案しますか?
また、この情報を絶えず移動させるには、どのくらいのバッテリー電力が必要ですか?
モバイルオペレーティングシステムの設計をデスクトップオペレーティングシステムの設計と比較するのは少しばかげているようです。つまり、デスクトップオペレーティングシステムを使用すると、(ほぼ)無制限の電力を保証でき、(スマートフォンと比較して)無限に多くのメモリとストレージ容量を確保できます。
スマートフォンに従来の(デスクトップ)マルチタスクを実装する際の主な問題は、ストレージ/ RAM /スワップが少なくなるとスラッシングが発生する可能性があることだと思います可能性がありますカーネルパニックにつながります。これはスマートフォンでは悲惨なことです。
スワッピングは問題の解決にいくらか役立ちますが、必ずしも完全な解決策ではありません。スワップしたくない理由は次のとおりです。
もう1つの理由(これは単なる推測ですが)は、スワップが不足し、通常は正常に動作するアプリを強制終了しなければならなかったために誤動作を開始した場合、ユーザーはそれをOSの問題であると認識する可能性があります。一部のアプリは、常に強制終了し、処理できないために常に誤動作する場合、ユーザーはそれをアプリのバグと見なす可能性が高くなります。