4

私の質問は、このImageDownloaderでは、キャッシュをハードキャッシュとソフトキャッシュとして実装し、ハードキャッシュ用に実装しているということです。

  // Hard cache, with a fixed maximum capacity and a life duration
private final HashMap<String, Bitmap> sHardBitmapCache =
    new LinkedHashMap<String, Bitmap>(HARD_CACHE_CAPACITY / 2, 0.75f, true) {
    @Override
    protected boolean removeEldestEntry(LinkedHashMap.Entry<String, Bitmap> eldest) {
        if (size() > HARD_CACHE_CAPACITY) {
            // Entries push-out of hard reference cache are transferred to soft reference cache
            sSoftBitmapCache.put(eldest.getKey(), new SoftReference<Bitmap>(eldest.getValue()));
            return true;
        } else
            return false;
    }
};

ハードキャッシュの最大容量値を設定しています。最大容量として大きな値を選択するとどうなりますか。つまり、アプリケーションが大容量のメモリを使用しているため、実行中の他のアプリケーションに影響します。その他アプリは、dalvikの完全に別個のインスタンスで実行されます。これで実行されているアプリケーションでメモリプレッシャーが発生することはありません。これが私が知ったものです。これが正しければ、任意のサイズのハードキャッシュを宣言できますか?このキャッシュについてはよくわかりません。 ..私が間違っている場合は私を訂正してください..

4

1 に答える 1

0

デバイスには一定量のメモリがあり、すべてのアプリケーションで共有されます。フォアグラウンド プロセスに必要なメモリを与えるために、Android はキャッシュされたバックグラウンド プロセスを強制終了します。メモリ フットプリントが大きいアプリケーションは、他のアプリを最初から作成する必要があるため、マルチタスクが遅くなります。

対称的に、メモリ フットプリントが大きいアプリケーションは、メモリをあまり使用しないアプリケーションよりも早く強制終了されます。結局のところ、これらのアプリを終了すると、より多くのメモリが解放されます。

良好なパフォーマンスが得られる最小のキャッシュ サイズを選択する必要があります。それより大きいと、メモリが無駄になり、デバイスの速度が低下します。

于 2012-04-16T11:43:16.447 に答える