2016-11-16 5 views
0

私はdocsを見ていて、LruCacheがヒープリソースを他のアプリケーションと競合しているのか、実際に何らかの精巧なディスクスワッピングメカニズムを使用しているのかどうかを理解しようとしています。LruCacheはAndroidアプリのメモリ容量によって制約されていますか?

私は、デバイスがインターネット接続を失った場合、大量のイメージデータがローカルに保存されるように、キャッシュ用のメモリをたくさん割り当てたいと思っています。しかし、LruCacheがAppのヒープメモリ割り当てのサイズに制約されている場合、これは明らかに機能しません。

私は、この機能の仕組みや、この必要性を処理するための適切な機能ではない場合、自分自身をロールバックする必要がある場合やAndroidネイティブディスク私は多分LruCacheと組み合わせる必要があること見下ろすよスワップメモリ​​クラス(またはそれ自身に完全に使用?)私はドキュメントを見て、LruCacheがでヒープリソースの競合している場合を理解しようとしている

答えて

2

私のアプリの残りの部分、または実際には何らかの精巧なディスクスワッピングメカニズムを使用している場合などです。

アプリのヒープスペースを使用しています。これを確認するにはthe LRUCache source codeが表示されます。

ただし、LruCacheがAppのヒープメモリ割り当てのサイズに制限されている場合、これは明らかに機能しません。

正しい。

私は自分自身をロールバックする必要があるか、私は

を見下ろすてるAndroidのネイティブディスクスワップメモリ​​クラスがあるかどうAndroidアプリレベルで本当に「ディスクスワップメモリ​​」という概念が存在しない場合非常に少数のデバイスがOSレベルで実装しています。

+0

ローカルストレージでN個以上のブロックを消費するリスクを冒さずに、ローカルイメージのかなりの部分に掛けたいと思ったら、どうすればいいですか?私は完全に運がここにありますか? –

+0

@ GeniaS .: "ローカルストレージでN個以上のブロックを消費するリスクを冒すことなく、ローカルイメージのかなりの部分に掛けたいですか?" - 私はあなたが "ローカルストレージ"を意味するものとは考えていません。ディスクスペースを意味する場合、それは "ディスクスワップメモリ​​"のようなものではなく、何とか魔法のようにディスクスペースを使用しません。あなたの思考が「私はメモリにデータを保存してディスクスペースを節約する」と思っていたのですが、それはちょっと後ろ向きです。その場合、あなたは間違いなく運がありません。 – CommonsWare

+0

@ GeniaS:通常、Androidではメモリキャッシュから始めます。それ以上の空き容量が必要な場合、またはプロセスの終了時にキャッシュが存続するようにする場合(Webブラウザのキャッシュなど)、ディスクでバックアップされた2層キャッシュを使用します。使用するディスク容量を上限にするので、ユーザーはあなたに怒られることはありません。それ以上のものがある場合は、LRUなどのアルゴリズムを使用してキャッシュ値を最大化し、元のデータソース(ネットワークなど)から再度取得する必要があるものを最小限に抑えます。 – CommonsWare

関連する問題