android 工作室在 Viewflipper 中出现 OutOfMemoryError
android studio gives OutOfMemoryError in Viewflipper
我正在使用 ViewFlipper 使用数组动态显示图像。图片大约有 100 张。当我 运行 那个 activity 时,应用程序停止并出现 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);
}
不要使用 viewflipper,使用 android.support.v4 中的 viewpager。看看下面的sample how to use viewpager with adapter. More details can be found in the following blog post.
看看下面的article。
您需要缩放图像并适当地处理它们。 7 兆字节是压缩图像的大小。位图消耗更多 space。
这些图像中的每一个都将占用 1228800 字节的堆 space (640 x 480 x 4 bytes/pixel),这有点超过 1MB。其中 100 个将消耗 ~120MB 的堆 space。在许多 Android 设备上,您不会有那么多堆 space,并且 ViewFlipper
需要您预加载这些图像的 所有 。
您将需要改变您的方法,这样您就可以一次只在内存中保存其中的一些图像。至少,这将需要从 ViewFlipper
切换到不需要预加载所有内容的其他内容(例如,使用 AdapterViewFlipper
)。
此外,您需要将这些图片放入 res/drawable-anydpi/
或 res/drawable-nodpi/
。我的猜测是您将它们放在其他地方(例如,res/drawable/
),在这种情况下,它们的内存消耗将在高分辨率设备上显着增加。
我正在使用 ViewFlipper 使用数组动态显示图像。图片大约有 100 张。当我 运行 那个 activity 时,应用程序停止并出现 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);
}
不要使用 viewflipper,使用 android.support.v4 中的 viewpager。看看下面的sample how to use viewpager with adapter. More details can be found in the following blog post.
看看下面的article。 您需要缩放图像并适当地处理它们。 7 兆字节是压缩图像的大小。位图消耗更多 space。
这些图像中的每一个都将占用 1228800 字节的堆 space (640 x 480 x 4 bytes/pixel),这有点超过 1MB。其中 100 个将消耗 ~120MB 的堆 space。在许多 Android 设备上,您不会有那么多堆 space,并且 ViewFlipper
需要您预加载这些图像的 所有 。
您将需要改变您的方法,这样您就可以一次只在内存中保存其中的一些图像。至少,这将需要从 ViewFlipper
切换到不需要预加载所有内容的其他内容(例如,使用 AdapterViewFlipper
)。
此外,您需要将这些图片放入 res/drawable-anydpi/
或 res/drawable-nodpi/
。我的猜测是您将它们放在其他地方(例如,res/drawable/
),在这种情况下,它们的内存消耗将在高分辨率设备上显着增加。