0

アクティビティのOOMエラーに問題があります。2つのイメージビューと約5つまたは6つのボタンを使用するレイアウトがあります。現在、OOMエラーが発生しますが、これらの方法で改善が見られました。この方法を使用して、ホーム画面でレイアウトを設定します。

private void createButtons() 
{
    bitmaps = new ArrayList<Bitmap>();

    ImageView img = (ImageView)findViewById(R.id.homescreen_logo);
    Bitmap bmp = (Bitmap)BitmapFactory.decodeResource(getResources(), R.drawable.homescreen_logo);
    img.setImageBitmap(bmp);
    bitmaps.add(bmp);

    ImageView imge = (ImageView)findViewById(R.id.countdown_labels);
    Bitmap bitmp = (Bitmap)BitmapFactory.decodeResource(getResources(), R.drawable.homescreen_countdown_text);
    imge.setImageBitmap(bitmp);
    bitmaps.add(bitmp);
}

次に、onPauseメソッドでこのメソッドを呼び出します。

private void recycleHomescreenImages() {
    for (Bitmap bmap : bitmaps) {
        bmap.recycle();
    }
    bitmaps = null;
}

これにより、ホーム画面アクティビティを終了する際のヒープ使用量が減少しますが、それだけでは不十分です。私が使用する他のビューはImageViewsではないため、setImageBitmap()メソッドを使用するのと同じ戦術を採用することはできません。ボタンの背景の収集を強制する方法についての提案はありますか?これが私のボタンの1つがxmlでどのように見えるかです。

<Button
  android:id="@+id/1_button"
  android:layout_width="294dp"
  android:layout_height="60dp"
  android:layout_alignParentTop="true"
  android:layout_centerHorizontal="true"
  android:layout_marginTop="33dp"
  android:background="@drawable/homescreen_button_1"
  android:onClick="onClick1"/>

助けてくれてありがとう。

4

2 に答える 2

1

必要に応じて、たとえばできるだけ遅く、それらBitmapやオブジェクトを遅延ロードすることをお勧めします。Drawableまた、それらが不要になった場合は、それらBitmapDrawableオブジェクトへの参照をnullに設定し、それらBitmapのsとDrawablesへの他の参照がないことを確認して、それらをガベージコレクションの対象にします。ガベージコレクタがいつ起動するかがわからないため、メモリを節約するためにできることはこれだけです。うまくいけば、これはあなたを助けるでしょう。

于 2012-07-30T15:14:05.247 に答える
0

私は実際、ここからの答えを次のように変更することで、それを機能させることができました:

private void unbindDrawables(View view) {
    if (view.getBackground() != null) {
    view.getBackground().setCallback(null);
    view.setBackgroundDrawable(null);
    }
    if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
        unbindDrawables(((ViewGroup) view).getChildAt(i));
        }
    ((ViewGroup) view).removeAllViews();
    }
}

編集:嘘、私はまだ時々OOMを取得します。

于 2012-07-30T15:27:56.783 に答える