さまざまな画面で構成されるアプリケーションに取り組んでおり、さまざまなレイアウトのさまざまなアクティビティとして設計しています。画面ごとに、オーバーレイの背景として使用される2つの大きな(1536x2048)pngファイルがあります(これらはアルファブレンドされています)。今のところ、アクティビティのレイアウトxmlファイルは次のようなものです。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/backgroundPic0"
tools:context=".TakvimActivity" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/backgroundPic1"
/>
</RelativeLayout>
とりあえず、メインのアクティビティから3つの異なるアクティビティに移動することができます。私はこれを簡単にやっています
Intent intent = new Intent(this, TakvimActivity.class);
startActivity(intent);
setContentView
新しいアクティビティが開始されてメソッドが呼び出されるたびに、背景画像が約24MBのメモリを消費することを認識しています。初めて新しい画面に移動し、メイン画面に戻って2番目の新しいアクティビティに移動すると、メモリ不足の例外が原因でアプリケーションがクラッシュし、「blabla-byte割り当てでメモリ不足」と表示されます。(2番目のアクティビティ遷移、場合によっては3番目の遷移などで正確にクラッシュしないことに注意してください。)アプリケーションから戻ったときに、アプリケーションがリソース(最も重要なのは画像ファイル)を解放しないようです。アクティビティ。現在のアクティビティが適切に破棄されているかどうかを確認しましたonDestroy
メソッドと私はそれが適切に呼び出されているのを見ました。ビュー階層への参照が消去されるため、GCは、アクティビティのUI関連のすべてのメモリを破棄する必要がありますか?たとえば、コードに含めなかったアクティビティのメモリをクリアする明示的な方法はありますか?