1

私の「ホームスクリーン」フラグメントには、いくつかの Imagebuttons があります。Imagebutton の XML は次のとおりです。

                <ImageButton
                    android:id="@+id/merkzettel"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:background="#00000000"
                    android:scaleType="fitXY"
                    android:src="@drawable/dashboard_merkzettel_icon__selector" />

ドローアブル XML セレクターは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/icon_startseite_merkzettel_on"
          android:state_pressed="true" />
    <item android:drawable="@drawable/icon_startseite_merkzettel_off" />
</selector>

古いデバイス (Nexus S) でデバイスをしばらく裏返すと (画面の向きを変更すると)、例外が発生します。

java.lang.OutOfMemoryError: bitmap size exceeds VM budget
    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:460)
    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336)
    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
    at android.content.res.Resources.loadDrawable(Resources.java:1709)
    at android.content.res.Resources.getDrawable(Resources.java:581)
etcetc

アクティビティ/フラグメントが再作成されるたびにAndroidがビットマップドローアブルを再作成したため、これは一般的な問題のようです。ドローアブルの場合、推奨される解決策はdrawable.recycle()それらにonDestroy()ありますが、ImageButtonのドローアブルを保持するための適切な方法が見つかりません.

誰でもこれに対する解決策を知っていますか?

4

1 に答える 1