0

我構建了一個具有6頁ViewPager的Android應用程序。對於每個頁面都有一個我使用的小圖片(不是背景,只是一個ImageView)。來自drawable資源的圖像png - >巨大的字節分配和OOM

這些圖像大約130KB。我注意到,這個活動開始時,我得到這樣一個消息:

02-09 21:23:58.755: I/dalvikvm-heap(6478): Grow heap (frag case) to 49.015MB for 2457616-byte allocation

玩了一會兒後,我也得到一個OOM異常。

我不明白爲什麼這樣大小的圖像在加載時需要很多空間。

有沒有人遇到過這樣的問題?任何解決方案

在此先感謝!

[UPDATE]

道歉不添加代碼:)

下面是我在ViewPager使用該片段的onCreateView:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     ViewGroup rootView = (ViewGroup) inflater.inflate(
       R.layout.fragment_selection, container, false); 

     mSelectionImage = (ImageView) rootView 
       .findViewById(R.id.selection_image); 

     switch (mPageNumber) { 
     case 0: 
      mSelectionImage.setImageResource(R.drawable.img_sel_0); 
      break; 
     case 1: 
      mSelectionImage 
        .setImageResource(R.drawable.img_sel_1); 
      break; 
     case 2: 
      mSelectionImage.setImageResource(R.drawable.img_sel_2); 
      break; 
     case 3: 
      mSelectionImage 
        .setImageResource(R.drawable.img_sel_3); 
      break; 
     case 4: 
      mSelectionImage.setImageResource(R.drawable.img_sel_4); 

      break; 
     case 5: 
      mSelectionImage 
        .setImageResource(R.drawable.img_sel_5); 
      break; 
     default: 
      break; 
     } 


     return rootView; 
    } 
+0

這是很難理解的,沒有代碼 – 2013-02-09 21:38:06

+0

圖像佔用的內存比按照png或jpg格式的大小顯示更多的內存,但最終你會被要求在三或兩個以下的註釋代碼,因爲它很難理解內存泄漏這樣的金額與六個130kb pngs ... – BIOHAZARD 2013-02-09 21:42:01

+0

你確定你使用的圖像是小? – 2013-02-09 22:11:43

回答

1

你有6個圖像,每個是png ,大小爲398x538。

這意味着,默認情況下,它們都使用6 * 4 * 398 * 538 = 5,138,976字節,大約5 MB。

這看起來不像是你的OOM的真正原因。

您能否介紹一下應用程序和其他可能導致此問題的原因的更多信息?

你可能把文件放在drawable-ldpi或drawable-mdpi中?

在這種情況下,圖像會佔用更多,這取決於您正在運行的設備的密度。例如,如果您將它們全部放在drawable-mdpi中,但設備正在xdpi屏幕上運行,則這會佔用4倍的內存(因爲我們將寬度和高度都加倍)。它仍然沒有接近你所擁有的50MB。

+0

感謝您的快速反饋!圖像放在可繪製的文件夾中。除此之外,沒有其他特殊活動完成。這是一個帶ViewPager和PagerIndicator的簡單FragmentActivity,其中我有6個片段,如上所述。 – 2013-02-09 23:35:48

+3

你在哪個設備/模擬器上運行它?另外,請不要將圖像放入可繪製文件夾中。把它放到一個密度文件夾中,比如drawable-xdpi或drawable-hdpi(和其他)。 drawable文件夾用於xml類型的drawables,而不是圖像。另外,爲了確定這會導致問題,請嘗試評論您在此處顯示的代碼,並使用ddms查看使用了多少內存。 – 2013-02-10 00:29:00