問題タブ [android-lru-cache]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - LruCacheにキーのみを受け入れるようにする方法は?
LruCache
はマップですが、LruCache
文字列のみをキャッシュするために使用したい、つまり、LruCache を HashSet として機能させたいと考えています。
LruCache
クラスはどのように定義すればよいですか?
LruCache<String, Void>
lruCache.put("abc", null)
私のコードが呼び出されたときにNullPointerException
がスローされたため、動作しません。
ありがとう。
android - LruCache を使用してビットマップをメモリに格納する
アプリに LruCache を実装しようとしていますが、ドットを接続して異なるコンポーネント間でビットマップを渡すのが困難です。
アプリに LruCache を統合する方法を知りたいです。また、LruCache を実装するプロセスを理解しようとしているので、詳細が多いほど良い
最初のクラスは AsyncTask Image Loader で、2 番目のクラスはカスタム アダプターです。
非同期タスク
カスタム ビュー アダプター クラス
android - Asset png を効率的に描画してキャッシュする
私はthquinnのDraggableGridViewを使用しており、そこに〜60枚の画像をロードしています。これはすべてうまくいきます。アセットに必要なすべての画像がありましたが、最初に画像のテキストのみが変更されるため、実行時にそれらを作成したいと考えています。追加は問題になりませんが、アセットからの削除は不可能であり、不要なスペースを使用する Air。ここで私の動機を簡単に説明します。
したがって、この投稿のメソッドを使用してアセット png にテキストを描画し、それをビットマップに変換して LRU キャッシュで使用できるようにしました。これはいくつかの画像で機能しますが、必要なすべての画像を表示しようとするとすぐに OutOfMemory エラーが発生します。ベース画像は 200x200 px で、画面サイズと密度に応じて必要なサイズにスケーリングする必要があると思います。
まず、ビットマップ キャンバスを作成してから、(キャッシュ用に) ビットマップにする LayerdDrawable を作成するため、この方法は効率的ではないようです。確かではありませんが、メモリを乱雑にする多くの一時画像を作成しているように感じます。そして、減価償却された BitmapDrawable を使用しています。BitmapDrawable がないと、このメソッドはどのように見えますか??
私はこれを一般的に正しい方法で行っていますか?また、OOMエラーが発生しないように、このメソッドを効率的に作成するにはどうすればよいですか?!?
ところで。LRUcache を使用せず、GridView の LayerdDrawable を返すだけの場合、画像は正常に読み込まれますが、オリエンテーションを数回変更した後に例外が発生します。これは私が持っている方法です:
更新: BitmapDrawable を使用していないため、別の方法を試してみました。しかし、それでも OOM エラーが発生します。また、通常、キャッシュから取得した画像が 1 つまたは 2 つしかない場合に、キャッシュされた画像を実際に使用していないようです。
これがフラグメント内にある前に、私も言及できませんでした。それが重要かどうかはわかりません。しかし、縦向きモードではこのフラグメントしかなく、横向きモードでは幅が許せば別のフラグメントが存在する可能性があります。
android - Androidで400kbサイズのビットマップをLRUCacheに保存する方法
リストビューの項目をクリックすると、sdcard から画像が取得され、LRUCache に保存されます。画像は 750*580 の 400kb サイズです。しかし、キャッシュからビットマップを取得している間、ビットマップは null です。
ここに私のコードがあります: ここで lv はリストビューで、showpicture は初めて SD カードからビットマップを取得する方法です。
android - 画像をキャッシュするAndroidの最良の方法
私は自分のアプリ用に Web からダウンロードした画像をキャッシュする最も効率的な方法を構築しようとしています。数年前にこれを実行しようとしましたが、見つかった lazylist アダプターに出くわすまで、これを機能させる効率的な方法を見つけることができませんでした。ここ:
これは Android 4.0 が導入されるまではうまく機能していましたが、この時点でアプリは 10 ~ 20 個の画像を読み込んだ後にクラッシュしました。以前は、問題なく好きなだけ簡単に読み込むことができたのとは対照的でした。これは後でわかった結果ですGingerbread 2.3 以前には存在しなかったアプリごとのメモリ使用量に制限が設定されているアイス クリーム サンドイッチについて、クラッシュを避けるために 10 枚程度の画像ごとにキャッシュをクリアすることにしましたが、ユーザー エクスペリエンスはあまり良くありませんでした。これを行った結果、すでに表示されている画像を何度も何度も再ダウンロードしていたため、アプリは大量のデータを使用しました。それ以来、lru キャッシュを使用しようとしましたが、特に私がアプリを終了して再起動すると、画像がすべて解放されたようです。これを行うためのより良い方法が必要であり、Instagram などの他のアプリが数百メガバイトの画像をキャッシュする方法を見つけたように見えることに気付きました。コンテンツを決して排出しないように見える無限サイズのキャッシュを保存できるようにするために、この種のキャッシュを構築する方法を知っている人はいますか?
android - Android: キャッシュ内のオブジェクトの数を追跡する
ViewPager を使用してギャラリーを構築しています。写真がダウンロードされるたびに、すぐにキャッシュしますmMemoryCache
。
ご覧のとおりsizeOf()
、バイトが使用されている場合は数値を返します。これは理にかなっています。私の問題は、ViewPager のアダプターが、所有しているページ数 (キャッシュ内のオブジェクトの数) を知る必要があることです。
どうすればそれができるかについてのアイデアはありますか?ありがとう!