すべてのアクティビティで多くのビットマップをロードしています。アクティビティを切り替えた後、「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 で解放する必要があるといういくつかの投稿を読みました。
誰かがこの問題に対するより良い解決策を持っていますか?
ありがとう