Android關於OutOfMemoryError的一些思考

不少的時候,咱們使用Bitmap不會出現多大的問題。可是當機器資源不夠的狀況下,不少應用都會報出 OutOfMemoryError,固然報出這樣的異常每每是給Bitmap分配內存時內存不足引發的。即使是很小的一個圖片,也會有出錯,如何解決呢? java

個人解決辦法以下: spa

 

[java]  view plain copy
  1. public static Bitmap createBitmap(int width, int height, Bitmap.Config config) {  
  2.     Bitmap bitmap = null;  
  3.     try {  
  4.         bitmap = Bitmap.createBitmap(width, height, config);  
  5.     } catch (OutOfMemoryError e) {  
  6.         while(bitmap == null) {  
  7.             System.gc();  
  8.             System.runFinalization();  
  9.             bitmap = createBitmap(width, height, config);  
  10.         }  
  11.     }  
  12. }  

通過最近不斷的實驗證實,當內存泄漏很大的時候,上述方法根本沒法避免內存溢出。其實避免內存溢出仍是要靠平時寫代碼的時候本身去注意。不少時候的溢出主要是由於Bitmap和Drawable資源沒被釋放形成的,尤爲是當項目中圖片資源不少的時候,這個問題尤其突出。 .net

解決辦法:當CreateBitmap以後,當這個Bitmap用完以後,那須要recycle這個資源。 blog

還有當須要更換圖片的背景資源的時候須要使用到Drawable,當須要更換那個Drawable時,原來的Drawable須要setCallback(null)來使Activity對原來的資源解除引用,從而使資源獲得釋放。Java的內存管理不像C++通常,可是也有它的靈活之處,只要仔細想一想,仍是能夠將內存管理好的。 圖片

 

若是你有更好的解決辦法,能夠一塊兒討論。 內存

相關文章
相關標籤/搜索