問題タブ [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 - Androidでメモリ内画像キャッシュを実装するにはどうすればよいですか?
これまで、Androidの画像にSoftReferenceキャッシュを使用していました。このキャッシュは、ListViewsに表示される画像に使用され、十分なメモリが残っている場合は、画面に表示されないアイテムの画像をメモリに保持するのに役立ちます。
これに伴う問題は、SoftReferencesが、最後のハードリファレンスがリリースされたほぼ瞬間にガベージコレクションされることです。この結果、画面から削除された画像はその時点でガベージコレクションされ、ユーザーがListViewのこのエントリにスクロールして戻ると、画像が内部電話メモリから再読み込みされ、複雑な遅延読み込みプロセスが発生します。リストの頻繁な再描画と一般的なパフォーマンスの低下。
ソフト参照動作のバグリクエストには、これは意図された動作であり、この種のものをキャッシュするにはLRUキャッシュを使用する必要があると記載されています。
私の質問を知っています。LRUキャッシュは、私が許可した量のメモリしか使用しません。ただし、アプリに大量のメモリが必要な場合、メモリは解放されません。キャッシュが使用できるメモリの量をどのように決定する必要がありますか?また、電話のメモリ状況が厳しくなった場合にキャッシュのサイズを減らす方法はありますか?
現在、画像キャッシュは、すべてのアクティビティの一種のグローバル画像ストレージとしてアプリケーション内に保存されています。これにより、アクティビティがバックグラウンドにあるか破棄されている場合でも、アプリは常に画像キャッシュのすべてのメモリを使用することになります。
android - Android で LruCache を使用した NoSuchMethodError
Android で LruCache を継承するカスタム クラスを使用するとエラーが発生します。画像をダウンロードしてキャッシュすることになっています。昨日は機能していましたが、今朝、この問題に遭遇しました。
これはクラスのコードです:
そして、これは LogCat からのエラーです:
なぜこれが起こっているのでしょうか?
どうもありがとうございました。
編集: このエラーは、Google Galaxy Nexus S フォンでは発生しないことに気付きましたが、Samsun Galaxy では発生します..誰か理由を知っていますか?
android - LRUCacheを使用してビットマップをリサイクルする必要があるのはいつですか?
LRUCache
ファイルシステムに保存されているビットマップをキャッシュするためにを使用しています。ここの例に基づいてキャッシュを構築しました:http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
問題は、アプリの使用中にOutOfMemoryが頻繁にクラッシュすることです。LRUCacheがイメージを削除して別のイメージ用のスペースを確保する場合、メモリは解放されていないと思います。
画像が削除されたときにBitmap.recycle()の呼び出しを追加しました。
これによりクラッシュが修正されますが、アプリに画像が表示されない場合もあります(画像があるはずの黒いスペースのみ)。発生するたびに、Logcatに次のメッセージが表示されますCannot generate texture from bitmap
。
クイックグーグル検索は、表示されている画像がリサイクルされているため、これが起こっていることを明らかにします。
では、ここで何が起こっているのでしょうか。削除された後にのみリサイクルするのに、リサイクルされた画像がLRUCacheに残っているのはなぜですか?キャッシュを実装するための代替手段は何ですか?Androidドキュメントには、LRUCacheが進むべき道であると明確に記載されていますが、ビットマップをリサイクルする必要性やその方法については言及されていません。
解決済み:
他の人に役立つ場合、受け入れられた回答によって提案されたこの問題の解決策は、上記のコード例で行ったことを実行しないことです(呼び出しでビットマップをリサイクルしないでください)entryRemoved()
。
代わりに、ImageViewを終了したとき(onPause()
アクティビティ内、またはビューがアダプターでリサイクルされたときなど)、ビットマップがまだキャッシュにあるかどうか(isImageInCache()
キャッシュクラスにメソッドを追加した)、およびあるかどうかを確認します。そうでない場合は、ビットマップをリサイクルします。それ以外の場合は、そのままにしておきます。これにより、私の例外が修正され、OutOfMemory
まだ使用されているビットマップのリサイクルが防止されました。
android - Androidのlrucacheを使用した例
人造人間のLruCacheを理解するのに助けが必要です。読み込み/スクロールを改善するために、グリッドビューに画像を読み込むために使用したいと思います。誰かがLruCacheを使用してサンプルコードを投稿できますか?前もって感謝します。
android - LruCacheを使用した画像のキャッシュ
AndroidでLruCacheを使用して一部の画像をキャッシュしようとしていますが、キャッシュされません
これがコードです
ここで他の方法
ここで私はそれらを使用していますこれは私のコードです
android - android-support-v4 を使用しているときに android.util.LruCache.* が見つからないのはなぜですか?
Android-support-v4.jar 互換ライブラリに含まれている LruCache を使用するプロジェクトを作成しています。JB を搭載したデバイスで実行すると、コードは正常に動作しますが、GB を搭載した Droid X で実行すると、アプリは次のエラーで終了します。
Utility.java:49 は次のようになります。
そのため、LruCache またはそのメソッドを参照すると、どこでもエラーが発生します。最初に思い浮かぶのは、android-support-v4.jar が APK ファイルから除外されていたことですが、そうではないようです。jar ファイルを libs/ の下に配置し、ant デバッグを実行した後に classes.dex.d を確認すると、次の行が追加されていることがわかります。
私の 2 番目の考えは、LruCache が android-support-v4 に含まれていない可能性があるということでしたが、ソースを見ると、次のソース ファイルがそこにあり、使用しようとしているメソッドが含まれていることがわかります。
では、なぜ見つからないのでしょうか。
android - Android システムは、停止時にアクティビティをどのように処理しますか?
アプリが画面から閉じられ、ユーザーが他のアプリに切り替えたときに、アプリのアクティビティがどうなるかについて非常に興味があります。アクティビティ サークルでは、アクティビティは onStop() に到達します。次に、システムがアクティビティを onRestart() または再起動する前にどのように処理しますか? ボンネットの下で正確に何が起こるのですか?まだキャッシュにあり、LRU に置き換えられますか?
この問題について議論しているアイデアや記事を知っている人はいますか?
可能であれば、それについて読むためのソースコードについて誰か言及できますか?
android - データベースから小さなビットマップをキャッシュする
アプリケーションがサーバーに接続するときに、どのアイコンが古いか、または欠落しているかを確認します。
これらのアイコンを sqllite データベースに保存します。アイコンはそれほど大きくなく、約 5 ~ 10kb です。
アクティビティが開始されるたびに、データベースにアクセスして必要なアイコンを取得します。
しかし、私のアクティビティの多くは同じアイコンを使用しているため、データベースからアイコンを一度取得し、アプリケーションを高速化するためにどこかにキャッシュすることを考えていました。
どうすればいいですか?
私はこのリンクを読んでいました: http://developer.android.com/training/displaying-bitmaps/cache-bitmap.htmlそして彼らはビットマップのlruCacheについて言及しました。
しかし、これは私が達成しようとしていることに対して少しやり過ぎではありませんか?
android - Android Lrucacheの参照/オブジェクトが重複しているかどうか?
Android LruCache を適用して、アプリの速度を上げ、サーバーへの大量の呼び出しを回避したいと考えています。ここに私のシナリオがあります:
2 つの LruCache オブジェクトを作成しました。
mItemsCache は、一意の ID 文字列で取得できるすべてのアイテムのキャッシュを保持します。一方、mListItemsCache はすべての異なるアイテム リストをキャッシュします。各リストは、mItemsCache で利用可能なアイテムに基づいて作成されました。
私の質問は、mListItemsCache または mItemsCache から取得された Item は実際には同じ Object ですか?
put(K,V) により LruCache に格納されるたびにデータが複製されますか?
android - LruCache 内の画像で viewPager を高速スクロール
サイズを変更する必要がある4つの画像を持つviewPagerがあります。さまざまなオプションを実装しましたが、オプションは実行されません。私はさまざまなオプションを書きます:
getView に次のように入力します。
ビットマップは以下を取得します。
/li>
しかし、それは非常にゆっくりです。
最後のコードを AsyncTask() に入れましたが、すばやくスクロールできません。
私は
状態のときだけ画像を表示しています
SCROLL_STATE_IDLE
が、効果は他の場合と同じです。私は LruCache を使用し、画像を Asynctask の LruCache に保存します。
/li>
私が入れたinstantiateItemに
しかし、問題は前のケースと同じで、すばやくスクロールできず、アプリが非常に遅いです。
大きな品質とサイズの画像があります。viewPagerですばやくスクロールするにはどうすればよいですか?