web-dev-qa-db-ja.com

モバイルでは、プロセスが短命であり、その状態を明示的に維持しなければならない理由がありますか?

ほとんどのモバイルプラットフォーム(Android、iOS、Windows Phone 7、新しいWinRTなど)は、メモリ不足の下で非アクティブなアプリケーションプロセスを強制終了できます。これがユーザーエクスペリエンスに影響を与えるのを防ぐために、アプリケーションは、プロセスが強制終了されて再起動されたときに、状態を保存および復元することが期待されています。

この方法でアプリケーションプロセスを強制終了すると、開発者の仕事が難しくなります。

さまざまな場面で、次のようなモバイルアプリを見てきました。

  • ウェルカム画面に戻るたびに、ウェルカム画面に戻ります。
  • 切り替えたときにクラッシュする(プロセスが強制終了された後に存在しなくなった状態にアクセスする可能性があります)
  • 切り替えたときの誤動作(修正するために再起動またはタスクキラーが必要になる場合があります)
  • そうしないと、再現が難しい方法で誤動作します(例:Androidサービスが強制終了されて間違った時間に再起動された)

これらのモバイルオペレーティングシステムがこのようにタスクを強制終了するように設計されている理由は、特にアプリケーション開発がより困難になり、エラーが発生しやすくなるため、よくわかりません。

デスクトップオペレーティングシステムは、そのようなプロセスを強制終了しません。未使用のメモリページを大容量記憶装置にスワップアウトします。同じアプローチがモバイルで使用されない理由はありますか?モバイルハードウェアは、パフォーマンスの点でPCハードウェアよりわずか数年遅れています。

モバイルオペレーティングシステムがこのように設計されているのには、非常に正当な理由があると確信しています。これらの理由を説明している論文やブログの投稿を教えていただければ、または洞察を与えていただければ幸いです。

7
Alex Jasmin

ほとんどのユーザーにとって、スマートフォンの主な機能は電話としてであり、テキストメッセージの受信、および電子メールの受信がそれに続きます。スマートフォンOSの設計者は、アプリケーションがこれらの主要な機能に干渉しないようにする必要があります。

モバイルのもう1つの制約は、バッテリーの寿命です。バックグラウンドで「スピン」するアプリは、電流を消費してバッテリーの寿命を縮めます。スマートフォンOSの設計者は、現在使用されていないアプリケーションをスリープ状態にして、バッテリーの寿命を延ばす必要があります。

17
James Anderson
  • バッテリー寿命-バックグラウンドで実行されている多くのアプリケーションは、バッテリーを非常に速く消耗します。
  • 使用可能なメモリ
  • プロセッサー
  • 小さな画面
  • バッテリーの寿命について言及しましたか? :)

これは、WindowsPhoneプラットフォームでのこの機能に関する記事です。これが「必要な悪」である理由を説明することから始めます: モバイルの問題-Windows Phone 7のツームストーンニング

優れたモバイルプラットフォームは、モビリティがデバイスに課すハードウェアの制約を認識する必要があります。デスクトップと比較して、モバイルデバイスは、メモリ、処理能力、画面領域、およびバッテリ寿命が制限されています。これらの制約を合計すると、多くのアプリケーションが実行される非専用デバイスでは、他のアプリケーションがリソースを利用できるようにするために、アプリケーションが最終的に閉じられるかシャットダウンされると結論付ける必要があります。

9
stralsi

デスクトップOSでも、プロセスを完全に休止状態にして目覚めさせるのは簡単な作業ではありません。メモリページとは別に、プロセスが正しく動作するには、ネットワーク接続、ローカルファイル、ロック、セマフォなどの他のリソースが必要です。考慮する必要のあるすべての種類のカーネル/ユーザースペースオブジェクト。そして、リストは増え続けています。これは、アプリがダンプと復元の問題を自分で処理する必要がある理由に答えると思います。

StackOverflowからLinuxの質問でプロセスを休止状態にする

5
xiaofeng.li

それで、アプリの状態を永続的に保存するために無限の量のスワップスペースが必要ですか?ユーザーがメモリカードをインストールすることさえ保証できないので、23時間前に読み込まれ、30秒間実行され、2Mbのデータが生成されたアプリの状態をどこに保存することを提案しますか?

また、この情報を絶えず移動させるには、どのくらいのバッテリー電力が必要ですか?

モバイルオペレーティングシステムの設計をデスクトップオペレーティングシステムの設計と比較するのは少しばかげているようです。つまり、デスクトップオペレーティングシステムを使用すると、(ほぼ)無制限の電力を保証でき、(スマートフォンと比較して)無限に多くのメモリとストレージ容量を確保できます。

スマートフォンに従来の(デスクトップ)マルチタスクを実装する際の主な問題は、ストレージ/ RAM /スワップが少なくなるとスラッシングが発生する可能性があることだと思います可能性がありますカーネルパニックにつながります。これはスマートフォンでは悲惨なことです。

2
Jamie Taylor

スワッピングは問題の解決にいくらか役立ちますが、必ずしも完全な解決策ではありません。スワップしたくない理由は次のとおりです。

  • スワップスペースが少なくなると、とにかくアプリを強制終了し、潜在的なバグに対処する必要があります。スワップ用にフラッシュのスペースを予約することでこれを部​​分的に軽減できますが、そのスペースをユーザーから奪っています。
  • 一部のメモリはスワップアウトできません。これが通常どのメモリであるかは、OSによって異なります。一例として、ハードウェアアクセラレーションを使用して写真を拡大縮小するギャラリーアプリケーションがあります。その場合、メモリのかなりの部分がGPUにマッピングされているため、スワップできない可能性があります。
  • 交換には電力と少しの時間がかかりますが(それほど多くない場合でも)、アプリを強制終了すると通常は電力が節約されます。

もう1つの理由(これは単なる推測ですが)は、スワップが不足し、通常は正常に動作するアプリを強制終了しなければならなかったために誤動作を開始した場合、ユーザーはそれをOSの問題であると認識する可能性があります。一部のアプリは、常に強制終了し、処理できないために常に誤動作する場合、ユーザーはそれをアプリのバグと見なす可能性が高くなります。

1
benj