设置活动的背景

时间:2011-07-20 15:06:51

标签: android

在我的Activity的onCreate()方法中,我抓住了Activity的布局的最外层的LinearLayout。然后我检查一下手机的方向是什么。如果是肖像,我将LinearLayout的背景图像设置为一个图像;如果它是横向的,我将LinearLayout的背景图像设置为另一个图像。

用户报告说,如果他们多次打开和关闭硬件键盘,应用程序将崩溃。生成的日志在onCreate()调用的setBackgroundResource的内部深处显示OutOfMemoryError(位图大小超过VM预算)错误。

我在这里做错了吗?是否有内置的方法让Android处理这个?

如果有用,日志还会在崩溃上方显示大约2打“意外恢复”。这是用户打开和关闭硬件键盘。

3 个答案:

答案 0 :(得分:1)

重写onConfigurationChange()方法,因为布局的更改是使用此方法处理的。

  @Override
    public void onConfigurationChanged(Configuration newConfig) {
            if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE)
            {
                //change of background 
            }
            else if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT)
            {
                //change the background
            }
                    else
                    { //do nothing, this might apply for the keyboard }


          super.onConfigurationChanged(newConfig);


        }


    }

并将其添加到您的清单

<activity android:name=".YourActivity"
         android:configChanges="keyboardHidden|orientation"                

                  android:label="@string/app_name">

答案 1 :(得分:1)

onCreate中加载背景图片时,请保存对它的引用。我假设它是一个位图,所以在位图上onDestroy调用recycle你应该没问题。

答案 2 :(得分:0)

发生这种情况是因为之前的图像保留在内存中,直到垃圾收集器清理它,每次用户打开关闭键盘时,都会创建一个新活动并完成一个新的图像实例。因此,为了防止崩溃,请清理活动中的内存。使用Femi所说的,如果它是位图,或强制调用垃圾收集器