2

アプリケーションを開始すると、ヒープは約15Mになります。呼び出した後setContentViewMainActivityそれは約30Mに上昇します。そのレイアウトにはあまりありません。そういうわけで私はそれが正常であるかどうか疑問に思います。別のアクティシティを開始すると、再び約40Mに上昇し、再び下降することはありません。

それはどのようmain.xmlに見えるかです:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:background="@drawable/background"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/LinLAdMain"
        android:layout_width="match_parent"
        android:layout_height="88dp"
        android:layout_weight="0.70"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.70"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:contentDescription="@string/logo_description"
            android:src="@drawable/logo" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="0.14"
        android:orientation="vertical" >

        <Button
            android:id="@+id/button1"
            style="@style/StartButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:onClick="onClick"
            android:layout_margin="8dp" />

        <Button
            android:id="@+id/button2"
            style="@style/HighscoreButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:onClick="onClick"
            android:layout_margin="8dp" />

        <Button
            android:id="@+id/button3"
            style="@style/SettingsButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:onClick="onClick"
            android:layout_margin="8dp" />

    </LinearLayout>
</LinearLayout>

ご覧のとおり、私は背景描画可能ファイルを使用しています。しかし、ファイルは約60Kの大きさです。

そして、それはMAT-default-reportが直後にどのように見えるかですsetContentView()

スクリーンショット

GCへのパスは次のようになります(弱参照を除く)。

スクリーンショット スクリーンショット

これらの「次」は、ヘッドクラスjava.lang.ref.FinalizerReferenceで終わりますが、これは何も教えてくれません。

私が言ったように、それはすべての活動で悪化しています。たとえば、Main-> Highscore-> GlobalHighscoreの後、アクティビティ「ingame」を開始することはできなくなります。皆さんが私を助けてくれることを願っています:)。

さらに情報/コードが必要な場合は、教えてください。

4

2 に答える 2

2

PNG や JPG などの画像ファイル形式は、圧縮アルゴリズムを使用して使用ディスク容量を削減しています。ただし、画像が Android アプリに読み込まれると、これらのファイルは解凍され、元のファイルよりもはるかに大きくなる場合があります。

解凍後に使用されるスペースは、PNG または JPG ファイルを BMP 32 ビット カラーに変換する場合に使用されるディスク スペースに似ています。

サイズが 1024 x 1024 ピクセルの非常に単純な完全な白の描画を PNG として保存すると、数キロバイトが使用されます。

ARGB_8888 に解凍すると、1024 x 1024 x 4 バイトの配列になります (最後の 4 は、ピクセルごとに使用される 4 バイトを表し、各基本色 RGB に 1 つ、アルファに 1 つ)。

1024 x 1024 x 4 = 4,194,304 = 4 MB

したがって、使用されるメモリは、この単純なイメージで 4 MB になります。

何をすべきか

画像が使用するメモリを減らします:

  • サポートするさまざまな画面サイズの要件を満たす最小のサイズ (幅と高さ) を使用します。
  • 画面ごとに異なるサイズを使用します (mdpi、hdpi など)。ただし、これによりアプリケーションのサイズが大きくなります。
  • Draw 9 Patch を使用して、予測可能で制御された方法で大画面に拡張される小さなサイズの画像を作成します。

メモリ割り当てを増やし続けているメモリ リークを見つけます。

おそらく、ContextGC がメモリを収集するのを妨げているアクティビティへの参照を使用している可能性があります。最も可能性の高い理由は、Context/Activity を参照するオブジェクトです。

  • スレッド
  • ハンドラー
  • ビュー

不要になったとき、またはアクティビティでそれらを無効にしてみてくださいOnDestroy()

よろしく。

于 2012-12-07T23:31:54.767 に答える
0

必要に応じて、画面に合わせてandroid:src="@drawable/logo"手動でサイズを変更します。drawable フォルダー内の logo.png を意味します。320x480 の解像度では、2560x1600 ピクセルのものは必要ありません!

于 2012-12-07T23:00:17.407 に答える