注意問題php
如何計算Bitmap佔用內存java
1.1 如何計算佔用內存android
1.2 上面方法計算內存對嗎c++
我看到好多博客都是這樣計算的,可是這樣算對嗎?有沒有哥們試驗過這種方法正確性?我以爲看博客要對博主表示懷疑,論證別人寫的是否正確。更多詳細能夠看個人GitHub:https://github.com/yangchong211git
@Nullable public static Bitmap decodeResourceStream(@Nullable Resources res, @Nullable TypedValue value, @Nullable InputStream is, @Nullable Rect pad, @Nullable Options opts) { validate(opts); if (opts == null) { opts = new Options(); } if (opts.inDensity == 0 && value != null) { final int density = value.density; if (density == TypedValue.DENSITY_DEFAULT) { opts.inDensity = DisplayMetrics.DENSITY_DEFAULT; } else if (density != TypedValue.DENSITY_NONE) { opts.inDensity = density; } } if (opts.inTargetDensity == 0 && res != null) { opts.inTargetDensity = res.getDisplayMetrics().densityDpi; } return decodeStream(is, pad, opts); }
正確說法,這個注意呢?計算公式以下所示github
1.3 一個像素佔用多大內存技術博客大總結面試
Bitmap.Config用來描述圖片的像素是怎麼被存儲的?算法
如何理解recycle釋放內存問題?segmentfault
圖片加載到內存其實有兩部分數據,這是爲什麼?技術博客大總結數組
查看源碼以下所示
如何在不壓縮圖片的狀況下加載高清大圖?
自定義可拖動的顯示高清大圖的View技術博客大總結
爲減小流量消耗,可採用緩存策略。經常使用的緩存算法是LRU(Least Recently Used):
核心思想:當緩存滿時, 會優先淘汰那些近期最少使用的緩存對象。主要是兩種方式:
大概過程以下?技術博客大總結
若是緩存滿了的話,什麼方法來管理移除最近最少使用的item和添加新的item?
trimToSize()方法,刪除最年長的條目,直到剩餘條目的總數達到或低於請求的大小
public void trimToSize(int maxSize) { while(true) { Object key; Object value; synchronized(this) { if (this.size < 0 || this.map.isEmpty() && this.size != 0) { throw new IllegalStateException(this.getClass().getName() + ".sizeOf() is reporting inconsistent results!"); } if (this.size <= maxSize || this.map.isEmpty()) { return; } Entry<K, V> toEvict = (Entry)this.map.entrySet().iterator().next(); key = toEvict.getKey(); value = toEvict.getValue(); this.map.remove(key); //計算如今緩存的大小,而後減掉多餘的,內部調用的是sizeOf()方法 this.size -= this.safeSizeOf(key, value); ++this.evictionCount; } //若是你想在在咱們的緩存中實現二級緩存,能夠實現此方法,源碼中是空方法。 this.entryRemoved(true, key, value, (Object)null); } }