5

以下是一些新手内存管理观察,我想听听经验丰富的意见。

似乎在 xml 布局中设置 android:backgound="@drawable/xyz" 会导致我的应用程序出现内存丢失。相应的活动不断堆积,直到我收到 OOM 错误。如果我旋转设备方向,尤其如此。

但是,如果我使用 setBackgoundResource() 加载相同的资源,然后清除回调并将背景引用设置为 null,则不会有任何泄漏。

也就是先在 onCreate()

    mMainLayout.setBackgroundResource(R.drawable.background_general_android);

然后在 onDestroy()

mMainLayout.getBackground().setCallback(null);
mMainLayout.setBackgroundDrawable(null);

这是大致正确的,还是我错过了一些重要的东西?

4

1 回答 1

1

仅当您将可绘制对象的副本保存在静态缓存中时,才会发生这种情况。您也可能会泄漏您的活动并将可绘制对象设置为 null 只会将问题隐藏更长时间。您应该使用 MAT 之类的工具来检查堆的内容并弄清楚发生了什么。

于 2012-05-06T19:30:45.957 回答