3

すべてのアクティビティで多くのビットマップをロードしています。アクティビティを切り替えた後、「java.lang.OutOfMemoryError」が大量に発生していました。私のアプリは主に縦向きです。

私は多くの解決策を試しましたが、この Web サイトの解決策の 1 つで比較的優れたアプローチを見つけました。

まず、XML レイアウトの親ビューに「id」属性を設定します。

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:id="@+id/RootView"
 >

次に、Activity の onDestroy() メソッドで、unbindDrawables() メソッドを呼び出して、親ビューへの参照を渡し、System.gc() を実行します。

@Override
    protected void onDestroy() {
    super.onDestroy();

    unbindDrawables(findViewById(R.id.RootView));
    System.gc();
    }

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

しかし、完全に除去するわけではありませんjava.lang.OutOfMemoryError。今、このメモリ例外がランダムに発生します。この問題を完全に取り除くには、コードからビットマップをロードし、アクティビティ onDestroy で解放する必要があるといういくつかの投稿を読みました。

誰かがこの問題に対するより良い解決策を持っていますか?

ありがとう

4

0 に答える 0