錯誤任何人都可以幫助如何處理位圖超過虛擬機buget錯誤。其實我已經在列表視圖中顯示更多圖像。它工作正常,並重復啓動活動後拋出位圖錯誤,任何答案都非常感謝。如何處理位圖大小超過android
0
A
回答
1
public enum BitmapLoading { INSTANCE;
private final Map<String, SoftReference<Bitmap>> cache;
private final ExecutorService pool;
private Map<ImageView, String> imageViews = Collections.synchronizedMap(new WeakHashMap<ImageView, String>());
private Bitmap placeholder;
BitmapLoading() {
cache = new HashMap<String, SoftReference<Bitmap>>();
pool = Executors.newFixedThreadPool(5);
}
public void setPlaceholder(Bitmap bmp) {
try {
placeholder = bmp;
} catch (OutOfMemoryError e) {
placeholder.recycle();
bmp.recycle();
placeholder = null;
bmp = null;
}
}
public Bitmap getBitmapFromCache(String url) {
if (cache.containsKey(url)) {
return cache.get(url).get();
}
return null;
}
public void queueJob(final String url, final ImageView imageView,final int width, final int height) {
/* Create handler in UI thread. */
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
String tag = imageViews.get(imageView);
if (tag != null && tag.equals(url)) {
if (msg.obj != null) {
imageView.setImageBitmap((Bitmap) msg.obj);
} else {
imageView.setImageBitmap(placeholder);
Log.d(null, "fail " + url);
}
}
}
};
pool.submit(new Runnable() {
@Override
public void run() {
Bitmap bmp = null;
try{
bmp = downloadBitmap(url, width, height);
Message message = Message.obtain();
message.obj = bmp;
handler.sendMessage(message);
}catch (OutOfMemoryError e) {
bmp.recycle();
bmp = null;
}
}
});
}
public void loadBitmap(final String url, final ImageView imageView,final int width, final int height) {
imageViews.put(imageView, url);
Bitmap bitmap = null ;
try {
bitmap = getBitmapFromCache(url);
if (bitmap != null) {
imageView.setImageBitmap(bitmap);
} else {
imageView.setImageBitmap(placeholder);
queueJob(url, imageView, width, height);
}
} catch (OutOfMemoryError e) {
bitmap.recycle();
bitmap = null;
System.gc();
}
}
private Bitmap downloadBitmap(String url, int width, int height) {
Bitmap bitmap =null;
try {
bitmap = BitmapFactory.decodeStream((InputStream) new URL(url).getContent());
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);
cache.put(url, new SoftReference<Bitmap>(bitmap));
return bitmap;
}catch (OutOfMemoryError e) {
bitmap.recycle();
bitmap = null;
System.gc();
}
catch (MalformedURLException e) {
} catch (IOException e) {
}
return null;
}
}
0
2
這些鏈接可能對您有用。
http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html
另外這個鏈接,因爲它顯示了任何人在實現涉及加載圖像的列表/網格時如何承擔簡單但嚴重的錯誤。
How to solve the vm budget memory heap error in lazy loading bitmaps?
另外,正如你所說,當你重複地調用你的活動時會出現dis問題,我懷疑你是在你的適配器的getView方法中初始化的線程中加載圖像。
這是我常見的東西,人們實現,然後遇到類似的問題。
如果這是您的代碼中發生的事情,您需要再次檢查它,因爲這將導致爲getView被調用的所有列表行生成線程。
0
居然還有如何在這個項目做延遲加載列表視圖中的一個很好的例子:Android Lazy Loading ListView。
相關問題
- 1. 位大小超過Android的
- 2. 位圖大小超過Android的
- 3. 如何處理java.lang.OutOfMemoryError位圖大小超過虛擬機預算pageradapter?
- 4. 位圖大小超過32位editText.buildDrawingCache
- 5. java.lang.OutOfMemoryError:位圖大小超過VM預算
- 6. 安卓:位圖大小超過DialogFragment
- 7. 位圖大小超過了mapview addoverlay
- 8. 位圖大小超過VM預算
- 9. ViewPager:位圖大小超過VM預算
- 10. OutOfMemoryError:位圖大小超過VM預算
- 11. java.lang.OutOfMemoryError:位圖大小超過VM預算
- 12. java.lang.OutOfMemoryError:位圖大小超過VM預算 - android - 多少圖片?
- 13. 如何處理大圖像大小?
- 14. JavaScript如何處理大整數(超過52位)?
- 15. 的Android的OutOfMemoryError位圖大小超過VM預算
- 16. Android動畫崩潰,位圖大小超過VM預算
- 17. 的Cocos2D的Android java.lang.OutOfMemoryError:位圖大小超過VM預算
- 18. Android OutOfMemoryError:位圖大小超過虛擬機預算
- 19. Android中的位圖大小超過虛擬機預算
- 20. Android outofmemory錯誤位圖大小超過vm 2.3.3中的預算
- 21. Android ListView OutOfMemoryError:位圖大小超過虛擬機預算
- 22. Android位圖大小超過虛擬機預算錯誤
- 23. Android的位圖的大小超過VM預算
- 24. java.lang.OutOfMemoryError:位圖大小超過VM預算 - Android的JAVA
- 25. Android錯誤:java.lang.OutOfMemoryError:位圖大小超過虛擬機預算
- 26. 位圖大小超過Vm預算錯誤android
- 27. 位圖大小超過虛擬機預算在android
- 28. android java堆大小超過
- 29. ANDROID:幫助,outofmemory位圖超出預算大小。如何回收?
- 30. 如何解決位圖大小超過虛擬機預算
我認爲這段代碼可能會幫助你 –