3

我有一個線性佈局我的ActivityGroup定義在Android的背景圖像不發生變化時,方向不

<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背景繪項目位於「繪製」和「繪製土地」的文件夾。 當方向改變時,一切正常,但背景不會根據方向改變。它始終保持背景的第一個drawable。

我試圖通過將行手動改變它在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"> 

和我刪除從我的佈局背景元素。沒有什麼改變。當設備方向改變時,我無法獲得新的可繪圖,並且最終導致應用程序崩潰的內存泄漏。

是否有任何其他方式強制改變drawables方向時呢?還是有任何理由,該應用程序使內存泄漏?

編輯:內存泄漏問題,我問了一個問題,在Android Memory Usage Problem on possibly using ActivityGroup

+1

我相信它會起作用。您是否嘗試將縱向背景放在'drawable-port /'而不是'drawable /'中? – bigstones 2011-03-01 14:58:01

+0

@我剛試過的大石頭,它沒有工作。 – Alkimake 2011-03-02 08:39:18

回答

2

而不是在方向變化切換繪製,可以改爲切換佈局。通過在layout-land/文件夾中放置一個具有相同名稱的xml文件,當屏幕方向爲橫向時,操作系統將加載此備用佈局。這樣,您將始終使用正確的drawable(因爲它們可以在兩個xml文件的每個文件中以不同的方式指定),並且您還可以獨立地優化佈局以適應兩種方向!

This post在Android開發者博客上建議了一些關於如何在定位更改時保留對象的技巧和竅門,並避免過程中的內存泄漏;這將對你有進一步的幫助。

+0

我嘗試了一切,包括你的建議。它在'layout-land'文件夾中創建新佈局時起作用。但是由於OutOfMemoryException的原因,我的應用程序會在3個方向上發生崩潰。如果我把這個背景,它會自動給內存泄漏。在從%58崩潰之前,堆大小增加了%80-90。並且內存從23增加50 MB。 – Alkimake 2011-03-03 07:40:54

+0

更改屏幕方向後,當前活動將重新啓動。如果您保留對上下文的任何引用,則可以持有對已銷燬的活動或背景Drawable的引用。相反,上下文引用應該與活動的生命週期相關聯。沒有看到你的實際代碼,這是我的教育猜測,爲什麼有泄漏。 Android文檔對避免內存泄漏提出了一些建議 - 我建議確保您的應用遵循這些(http://developer.android.com/resources/articles/avoiding-memory-leaks.html) – 2011-03-03 08:47:37

+0

我確保您的應用遵循了這些建議。我也問過SO上的內存泄漏問題。 HTTP://計算器。com/questions/5116728/android-memory-usage-problem-on-possible-using-activitygroup。正如你看到的內存泄漏只是當我把這個背景發生。沒有背景,沒有任何問題,內存分析器顯示非常穩定的應用程序。看來內存問題的主要原因是這個可繪製的。這就是爲什麼我結束了這個結果,因爲我消除了所有內存問題並避免了它們。 – Alkimake 2011-03-03 08:58:56