在Android背景图像不会改变方向

时间:2011-03-01 14:43:28

标签: android memory-leaks android-layout orientation onconfigurationchanged

我为我的ActivityGroup定义了一个线性布局

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:mtx="http://schemas.android.com/apk/res/com.matriksdata"
  android:id="@+id/homeActivityGroupBG"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  android:background="@drawable/background">

我有2个背景drawables位于“drawable”和“drawable-land”文件夹中。 当方向改变时,一切正常,但背景不会根据方向改变。它总是保留第一个可绘制的背景。

我尝试通过添加以下行来在onConfigurationChanged方法中手动更改它:

background.setBackgroundResource(R.drawable.background);

它解决了这个问题。但是每次配置更改或通过活动时都会导致大量内存泄漏。

编辑:我创建了一个theme.xml来定义窗口的背景图像。 XML文件包含:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme" parent="android:Theme">
<item name="android:windowBackground">@drawable/background</item>
</style>
</resources>

我将AndroidManifest.xml更改为

<application android:icon="@drawable/icon" android:label="@string/app_name"
android:debuggable="true" android:name="com.matriksdata.app.DefaultApplication"
android:theme="@style/Theme">

我从布局中删除了背景元素。没有任何改变。当设备方向发生变化时,我无法获得新的绘图,并且我最终会出现导致应用程序崩溃的内存泄漏。

还有其他方法可以在定位时强制更换drawable吗?或者是否有任何原因导致应用程序发生内存泄漏?

编辑:对于内存泄漏问题,我在Android Memory Usage Problem on possibly using ActivityGroup

询问了一个问题

1 个答案:

答案 0 :(得分:2)

而不是在方向改变时切换drawable,而是可以切换布局。通过在 layout-land / 文件夹中放置一个同名的xml文件,操作系统将在屏幕方向为横向时加载此备用布局。这样,您将始终使用正确的drawable(因为它们可以在两个xml文件中的每一个中以不同方式指定),并且还有一个额外的好处,即您可以为两个方向独立优化布局!

Android Developer's博客上的

This post提出了一些关于如何在方向更改时保留对象以及避免内存泄漏的提示和技巧;这对你有进一步的帮助。