方法一: 在從網(wǎng)絡(luò)或本地加載圖片的時(shí)候,只加載縮略圖,。 -
-
-
-
-
- public static Bitmap loadResBitmap(String path, int scalSize) {
- BitmapFactory.Options options = new BitmapFactory.Options();
- options.inJustDecodeBounds = false;
- options.inSampleSize = scalSize;
- Bitmap bmp = BitmapFactory.decodeFile(path, options);
- return bmp;
- }
這個(gè)方法的確能夠少占用不少內(nèi)存,可是它的致命的缺點(diǎn)就是,,因?yàn)榧虞d的是縮略圖,所以圖片失真比較嚴(yán)重,對(duì)于對(duì)圖片質(zhì)量要求很高的應(yīng)用,可以采用下面的方法,。 方法二: 運(yùn)用JAVA的軟引用,進(jìn)行圖片緩存,,將經(jīng)常需要加載的圖片,,存放在緩存里,避免反復(fù)加載,。 關(guān)于軟引用(SoftReference)的詳細(xì)說明,,請參看http://www./club/clubbbsinfo-9255.html,。下面是我寫的一個(gè)圖片緩存的工具類,。 -
-
-
-
- public class BitmapCache {
- static * BitmapCache cache;
-
- * Hashtable bitmapRefs;
-
- * ReferenceQueue q;
-
-
-
-
- * class BtimapRef extends SoftReference {
- * Integer _key = 0;
-
- public BtimapRef(Bitmap bmp, ReferenceQueue q, int key) {
- super(bmp, q);
- _key = key;
- }
- }
-
- * BitmapCache() {
- bitmapRefs = new Hashtable();
- q = new ReferenceQueue();
-
- }
-
-
-
-
- public static BitmapCache getInstance() {
- if (cache == null) {
- cache = new BitmapCache();
- }
- return cache;
-
- }
-
-
-
-
- * void addCacheBitmap(Bitmap bmp, Integer key) {
- cleanCache();
- BtimapRef ref = new BtimapRef(bmp, q, key);
- bitmapRefs.put(key, ref);
- }
-
-
-
-
- public Bitmap getBitmap(int resId, Context context) {
- Bitmap bmp = null;
-
- if (bitmapRefs.containsKey(resId)) {
- BtimapRef ref = (BtimapRef) bitmapRefs.get(resId);
- bmp = (Bitmap) ref.get();
- }
-
-
- if (bmp == null) {
- bmp = BitmapFactory.decodeResource(context.getResources(), resId);
- this.addCacheBitmap(bmp, resId);
- }
- return bmp;
- }
-
- * void cleanCache() {
- BtimapRef ref = null;
- while ((ref = (BtimapRef) q.poll()) != null) {
- bitmapRefs.remove(ref._key);
- }
- }
-
-
- public void clearCache() {
- cleanCache();
- bitmapRefs.clear();
- System.gc();
- System.runFinalization();
- }
-
- }
在程序代碼中調(diào)用該類: imageView.setImageBitmap(bmpCache.getBitmap(R.drawable.kind01, this)); 這樣當(dāng)你的imageView需要來回變換背景圖片時(shí),,就不需要再重復(fù)加載。 方法三: 及時(shí)銷毀不再使用的Bitmap對(duì)象,。 if (bitmap != null && b!itmap.isRecycled()){ bitmap.recycle(); bitmap = null; // recycle()是個(gè)比較漫長的過程,,設(shè)為null,然后在最后調(diào)用System.gc(),,效果能好很多 } System.gc(); |