3

定義された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">

そして、私は「drawable」と「drawable-land」フォルダに2つの背景のドローアブルを持っています。向きが変わるとすべてが正常になりますが、向きによって背景は変わりません。それは常に背景の最初の描画可能性を維持します。

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">

レイアウトから背景要素を削除しました。何も変わっていません。デバイスの向きが変わると新しいドローアブルを取得できず、最終的にアプリケーションがクラッシュする原因となるメモリリークが発生します。

向きが変わるときにドローアブルを強制的に変更する他の方法はありますか?または、アプリケーションがメモリリークを発生させる理由はありますか?

編集:メモリリークの問題について、 Androidのメモリ使用量の問題でActivityGroupの使用について質問しました

4

1 に答える 1

2

向きの変更時にドローアブルを切り替えるのではなく、代わりにレイアウトを切り替えることができます。同じ名前のxmlファイルをlayout-land/フォルダーに配置することにより、画面の向きが横向きの場合、OSはこの代替レイアウトをロードします。そうすれば、常に正しいドローアブルを使用することになり(2つのxmlファイルのそれぞれで異なる方法で指定できるため)、両方の方向に対してレイアウトを個別に最適化できるという追加の利点があります。

Androidデベロッパーのブログへのこの投稿では、向きの変更時にオブジェクトを保持し、プロセスでのメモリリークを回避するためのヒントとコツを紹介しています。これはあなたにとってさらに助けになるでしょう。

于 2011-03-02T15:01:21.783 に答える