1

256MB のメモリを搭載した Android デバイスの遅延に対して UI を改善する方法を探しています。メモリは非常に限られているため、大規模なフロントエンド アプリは他のアプリのスワップアウトを大量にトリガーします。

アイデアは次のとおりです。バックグラウンド アプリ (たとえば、Facebook アプリ) を継続的に実行する必要がない場合は、中断されないようにしなければならないテレフォニーとは異なり、そのアプリのプロセスを一時停止し、更新を取得するために数分ごとに実行し続けます。 、携帯電話がポケットの中でアイドル状態のときのみ、プロセスを再度一時停止します。

他のアプリのメモリをスワップアウトするラグを減らすために、一時停止したアプリのメモリを積極的にディスク/フラッシュにスワップできるようにして、フロントエンド アプリが必要とする順序で RAM を即座に解放できるようにします。(参照速度: クラス 10 SDHC: 10MB/秒の書き込み、したがって、Web ページが 20MB の RAM を要求する必要がある場合、ブラウザーは 2 秒間遅れます)

だから私の質問は次のとおりです。一時停止したプロセスのプライベートメモリをディスク/フラッシュにスワップするようにシステムを強制する方法は?

4

2 に答える 2

0

Androidはすでに一時停止されたアプリのメモリを処理しますが、プロセスを仮想メモリにスワップアウトするのではなく、必要に応じてそれらをダンプしてメモリを解放することができます。

Androidデベロッパーのドキュメントから-アクティビティライフサイクルの管理

アクティビティが一時停止または停止した場合、システムは、アクティビティを終了するように要求するか(finish()メソッドを呼び出す)、または単にプロセスを強制終了することによって、アクティビティをメモリから削除できます。アクティビティを再び開くとき(終了または強制終了した後)、アクティビティ全体を作成する必要があります。

アクティビティonPause()は、実行が保証されているライフサイクルコールバックの最後であり、その状態を保存できます。その後、Androidは適切と思われる場合にアクティビティをダンプします。

同じドキュメントのさらに先から:

...システムが緊急時にメモリを回復する必要がある場合、onStop()およびonDestroy()が呼び出されない可能性があります。したがって、onPause()を使用して、重要な永続データ(ユーザー編集など)をストレージに書き込む必要があります。ただし、このメソッドのブロックプロシージャは次のアクティビティへの移行をブロックし、ユーザーエクスペリエンスを低下させるため、onPause()中に保持する必要のある情報を選択する必要があります。

強調を追加

したがって、発生する可能性のあるボトルネックは、OSではなくアプリ自体にある可能性が高く、Activity状態の保存は、アプリ全体のメモリコンテンツを保存しようとする場合よりもはるかに高速である可能性があります。

于 2012-08-15T11:36:13.983 に答える
0

非アクティブなプロセスは、RAM が必要な場合、優先度が低いため、自動的にスワップされます (android の優先度を参照)。

理論的には、クラス 10 のカードは良好で、2 秒でしか交換できませんが、カードのメモリ コントローラは非常に長いため、5 秒または 6 秒かかります。クラス6以上は役に立ちません。

于 2012-08-14T10:32:31.497 に答える