我有一个使用大量位图的活动 (activity1)。我还有另一个加载位图的活动(活动2)。在某些手机上运行时,我在 activity2 中收到 OOM 错误。我已经追踪到由activity1中的布局引起的错误。如果我取出活动 1 中的所有位放大器,并仅用十六进制颜色替换它们,那么活动 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();
}
任何有关如何解决此问题的建议将不胜感激!谢谢。