したがって、Android での課題の 1 つは、さまざまなデバイスの仕様 (特にデバイスのメモリ) です。
モデル オブジェクトは、JavaSoftReferences
を遅延読み込み方式で広く使用するように作成したため、VM はデータ モデルの現在使用されていない部分を必要に応じて再構成するだけで自由に削除できます。
ただし、実際の課題の 1 つSoftReferences
は、VM のメモリが少なくなるまでぶらぶらするのではなく、弱参照になってから数秒以内にクリアされる傾向があることです。多くの場合、メモリに何もないことを意味するため、うまく機能しません。理想的には、十分なメモリを備えたデバイスでは、オブジェクトをメモリに保持することでユーザーが恩恵を受けることができます。
その結果、SoftReferences
最近参照されたオブジェクトへのハード ポインターを LRU が保持する LRU メカニズムと組み合わせるのが一般的です。もちろん、これはほとんど参照されないオブジェクトすべてに対して十分なメモリがあることを前提としているため、理想的ではありません。
また、LRU の適切なデフォルトを知ることも難しくなります。
完璧な世界では、Android はメモリ不足のコールバックをヒントとして使用します (したがって、小さな LRU から始めて、メモリ不足のコールバックが発生し始めるまで定期的に増やしてから、デバイスに適した値を見つけるために元に戻すことができます)。 、しかし私の経験では、このコールバックは実際の VM のメモリ プレッシャと一致することはないようです。
データ モデルが特定のデバイスでメモリを使いすぎていることを検出する合理的な方法を見つけた人はいますか?