有一個自定義按鈕控制,我已經有問題。 的按鈕佈局定義是這樣的:不明白爲什麼OutOfMemory上setImageDrawable
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ImageView
android:layout_width="180dp"
android:layout_height="180dp"
android:layout_centerInParent="true"
android:layout_margin="20dp"
android:background="#fff"
android:contentDescription="@string/my_button_info"
android:src="@drawable/button_appearance" />
</merge>
和button_appearance的定義是這樣的:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button_pic_down"
android:state_pressed="true" />
<item android:drawable="@drawable/button_pic"
android:state_focused="true" />
<item android:drawable="@drawable/button_pic" />
</selector>
現在,當我把我的按鈕(點擊的LinearLayout)我展示它作爲一個不同位圖和動畫它作爲旋轉,這裏是動畫:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1666"
android:fromDegrees="0"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:toDegrees="359" />
,我這樣稱呼它:
public void animateButton() {
myButton.setEnabled(false);
myButton.setImageDrawable(getContext().getResources().getDrawable(R.drawable.button_pic_spin));
myButton.startAnimation(AnimationUtils.loadAnimation(context, R.anim.spinner_animation));
}
那麼,當它揭開序幕操作完成後我停下來:
public void stopAndEnableButton() {
myButton.setEnabled(true);
myButton.setImageDrawable(getContext().getResources().getDrawable(R.drawable.button_appearance));
ttcButton.clearAnimation();
}
我已經收到了來自Crashlytics幾個崩潰就行剛好高於我打電話setImageDrawable。 Crashlytics說:
無法分配與1275632個免費字節,1245KB一個2869648字節分配,直到OOM
奇怪的是,這裏的PNG圖像的尺寸都大約25K - 而且只有3 (在button_appearance.xml中引用了2個,而在普通的button_pic_spin中引用了2個)當我嘗試交換最多隻有50K的內容時,如何達到2兆字節的要求?
在setImageDrawable之前我應該調用ClearAnimation的問題是什麼?系統是否真的試圖爲部分旋轉的位圖做一堆分配?
什麼是圖像的尺寸?考慮到磁盤中的大小是壓縮大小。圖像是未壓縮使用它 –
635x635像素 - 會這麼解釋嗎? – Kibi
它本身似乎並不具有戲劇性,但您遇到了一些內存問題。你有任何其他記憶密集型活動?應用程序在崩潰時使用了多少內存? –