2012-12-31 109 views
1

我有一個135幀的幀動畫應該每秒交換25次。幀數爲700X1000像素,240 dpi。我遇到的問題是,每當我在XML動畫文件中定義超過5幀時,應用程序就會崩潰。這些框架位於可繪製文件夾中。我試圖將它們複製到drawable-xhdpi,但這並沒有解決問題。幀動畫失敗,超過5幀 - 240dpi

感謝, 西蒙

+0

在這裏發表您logcat的錯誤信息.. – Vinay

+0

E/dalvikvm(29406):內存:堆大小= 65571KB,分配= 61893KB,極限= 65536KB E/dalvikvm(29406):額外的信息:足跡= 63459KB, (29406):threadid = 1:線程退出時未捕獲到的異常(group = 0x4163c2d0) E/A:允許的足跡= 65571KB,修正後的= 0KB D/skia(29406):--- decoder-> decode返回false E/AndroidRuntime(29406):FATAL EXCEPTION:main E/AndroidRuntime(29406):java.lang.IllegalStateException:無法執行活動的方法 E/AndroidRuntime(29406):\t at android.view.View $ 1.onClick(View .java:3608) E/AndroidRuntime(29406):\t在android.view.View.performClick – Simon

回答

1

加載圖像消耗32MB或64MB的所有堆內存(具有應用程序可用的內存)的問題。圖像作爲ARGB中的位圖加載到堆上 - 每個像素4個字節。嘗試對動畫圖像進行二次採樣。你的動畫有135 * 700 * 1000 * 4字節= 360.5 MB。

您可以使用方法decodeResource與具有參數inSampleSize在這裏你可以設置圖像的二次抽樣BitmapFactory.Options OPTS。如果您不需要圖像中的透明度,參數inPreferredConfig可用於設置RGB_565而不是ARGB_8888。

0

由於堆棧跟蹤說,這是造成內存溢出錯誤。 由於幀具有更高的分辨率,並且幀數也更多,所以這是例外。

1

錯誤清楚地表明您正在嘗試使用更多內存。這直接指向圖像大小。所以,您需要調整圖像大小以使用較小的內存。一個可以用於這個原因的是BitmapFactory.Option。否則,請手動調整圖像大小,注意它適合您的所有需求。

堆大小是分配給應用程序的內存量,以 執行。 Android應用程序的堆大小由設備 RAM決定。例如,如果設備的內存爲179 MB,則應用程序只能獲得18 MB的堆大小。

查找更多here。有關如何高效加載大型位圖的更多信息,請參閱here