かなり大量のビットマップを使用するアクティビティ (activity1) があります。ビットマップをロードする別のアクティビティもあります (activity2)。一部の電話で実行すると、アクティビティ 2 で OOM エラーが発生します。activity1のレイアウトが原因であるというエラーを追跡しました。アクティビティ 1 のすべてのビットアンプを取り出し、それらを 16 進数の色だけに置き換えると、アクティビティ 2 で OOM エラーは発生しません。
したがって、このことから、activity1 の onPause または onDestroy メソッドが呼び出されたときに、activity1 で使用しているビットマップがヒープから削除されていないと想定しています。これまでのところ、ここから回答を試しましたが、それでも OOM エラーが発生します。これまでの onPause および onResume メソッドは次のとおりです。
@Override
protected void onPause() {
mCache.onPause();
mContext = null;
mTimer.cancel();
mTimer = null;
unbindDrawables(findViewById(R.id.home_root));
System.gc();
super.onPause();
}
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();
}
}
@Override
protected void onResume() {
super.onResume();
setContentView(R.layout.homescreen);
createButtons();
mCache.onResume();
performAnimation(false);
mTimer = new Countdown();
mTimer.start();
}
これを修正する方法についての提案は大歓迎です! ありがとう。