基本的なアクティビティ(SherlockActivityサブクラス)があり、それがロードするビューには、単一の最大サイズのImageViewがあります。
<LinearLayout xmlns:p1="http://schemas.android.com/apk/res/android"
p1:orientation="vertical"
p1:minWidth="25px"
p1:minHeight="25px"
p1:layout_width="fill_parent"
p1:layout_height="fill_parent"
p1:id="@+id/linearLayout1">
<ImageView
p1:src="@android:drawable/ic_menu_gallery"
p1:layout_width="fill_parent"
p1:layout_height="fill_parent"
p1:id="@+id/imageView"
p1:scaleType="fitCenter" />
</LinearLayout>
アクティビティが行うのは、ビットマップをロードしてImageViewに割り当てることだけです。
var iv = FindViewById<ImageView>(Resource.Id.imageView);
iv.SetBitmapImage(BitmapFactory.decodeFile(file....))
ロード時にビットマップのサイズを変更する方法(http://developer.android.com/training/displaying-bitmaps/load-bitmap.html)を理解する前は、アプリまで、アクティビティをロードするたびに5MBのメモリを消費していました。クラッシュしました(現在はそうではありませんが、この問題はまだ残っていると思います)。私がこのようにしたとしても:
- 親アクティビティで、ボタンをタップして子を開きます
- 子(上の画像ビュー)では、戻るをタップします
- 親では、開いた子
- 子供の場合は、タップして戻します
- クラッシュするまでなど(毎回5MBなので約4回!)
実際の質問:アクティビティが停止または破棄されたときに画像を破棄する予定ですか?私はJava(またはC#)で物事がGC化されていると思ったので、それを行う必要はありません。アクティビティのライフサイクルで何かが足りませんか?
両方の回答者が最終的に正しい回答を思いつきました(GCはそれを行いますが、recycle()を使用して強制することができます)。したがって、回答に含まれているものを正しくマークすると、他の人が見つけやすくなります。