我正在使用ViewFlipper使用数组动态显示图像。图像大约有100张。运行该活动时,该应用程序停止并显示java.lang.OutOfMemoryError:
错误。合并的图像大小约为7 MB。为了显示所有图像应该怎么做?以下是我正在使用的Java代码。
ViewFlipper viewflipper;
int result_images[]=
{R.drawable.resultone,R.drawable.resulttwo,R.drawable.resultthree,
...,R.drawable.resultonehundredsixteen};
viewflipper = (ViewFlipper) findViewById(R.id.viewflipper);
for(int i=0;i<result_images.length;i++)
{
// This will create dynamic image view and add them to ViewFlipper
setFlipperImage(result_images[i]);
}
viewflipper.startFlipping();
private void setFlipperImage(int res) {
Log.i("Set Filpper Called", res+"");
ImageView image = new ImageView(getApplicationContext());
image.setBackgroundResource(res);
viewflipper.addView(image);
}
答案 0 :(得分:1)
这些图像中的每个图像都将占用1228800字节的堆空间(640 x 480 x 4字节/像素),比1MB多一点。其中100个将消耗〜120MB的堆空间。您不会在许多Android设备上拥有那么多的堆空间,而ViewFlipper
要求您预加载这些图像的全部。
您将需要改变您的方法,这样您就可以一次只将其中的几个图像保存在内存中。至少,这需要从ViewFlipper
切换到不需要预先加载所有内容的其他内容(例如,使用AdapterViewFlipper
)。
此外,您需要将这些图像放入res/drawable-anydpi/
或res/drawable-nodpi/
中。我的猜测是您将它们放置在其他地方(例如res/drawable/
),在这种情况下,它们在高分辨率设备上的内存消耗将大大增加。
答案 1 :(得分:0)