Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Outofmemory可绘制_Android_Out Of Memory - Fatal编程技术网

Android Outofmemory可绘制

Android Outofmemory可绘制,android,out-of-memory,Android,Out Of Memory,这是我的viewpager的可绘制阵列,当我运行它时,会导致内存不足错误,有没有办法减小图像大小等? 我做了很多搜索,但我不能使用它们。。 请帮忙 GalImages = new int[] { R.drawable.tutorials_01_android_en,R.drawable.tutorials_02_android_en,R.drawable.tutorials_03_android_en,R.drawable.tutorials_04};break @Override publi

这是我的viewpager的可绘制阵列,当我运行它时,会导致内存不足错误,有没有办法减小图像大小等? 我做了很多搜索,但我不能使用它们。。 请帮忙

GalImages = new int[] { R.drawable.tutorials_01_android_en,R.drawable.tutorials_02_android_en,R.drawable.tutorials_03_android_en,R.drawable.tutorials_04};break

@Override
public Object instantiateItem(ViewGroup container, int position) {

    ImageView imageView = new ImageView(context);
    final int temp = position;
    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
    imageView.setImageResource(GalImages[position]);

    ((ViewPager) container).addView(imageView, 0);
    imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {}
    });
    return imageView;
}
这不是因为文件太大。由于Android缓存了Drawables,所以在使用少量图像后,内存就会耗尽。但我找到了另一种方法,跳过android默认缓存系统

Soultion: 在资源中创建一个可绘制文件夹,并将图像移动到资源中的“可绘制”文件夹,然后使用以下函数获取BitmapDrawable

public static Drawable getAssetImage(Context context, String filename) throws IOException {
    AssetManager assets = context.getResources().getAssets();
    InputStream buffer = new BufferedInputStream((assets.open("drawable/" + filename + ".png")));
    Bitmap bitmap = BitmapFactory.decodeStream(buffer);
    return new BitmapDrawable(context.getResources(), bitmap);
}
参考文献:

另外,在清单文件中添加下面的行

android:largeHeap="true"

根据您的分辨率,尝试将您的Drawable从较低的MPI移动到HDPI或甚至更高维度的文件夹,如XHDPI


我的图像的尺寸范围是400-800像素。我把我的抽屉储存在我的Galaxy S4上的MDPI内存中。我将它们移动到HDPI,解决了问题。

正如穆罕默德所提到的,尝试将drawable(或MDPI)中的图像作为HDPI或更高版本移动到另一个维度文件夹

始终尽可能使用压缩PNG。有很多在线站点可以进行大规模压缩


参考资料:

只要您的图像不是很大,您就可以为PNG使用可绘制nodpi文件夹。我可以确认这为我解决了问题。

将android:largeHeap:“true”添加到清单文件中,并将可绘制图像移动到文件夹
mipmap hopi


[android][java][android studio]

之前提到过@Muhammad, 创建包含多个图像(hdpi、ldpi、mdpi、xdpi等)为我解决了这个问题

因为我花了一些时间来考虑如何添加这些文件 下面是一些解释它的打印屏幕: 可绘制-->新建-->批处理可绘制导入(用于多个文件)
然后添加文件 然后选择了决议

看看这个问题。我也面临着同样的问题,你有什么解决办法吗?我几乎不敢相信像这样简单的事情能立刻解决我的记忆问题。非常感谢。不要用android解决此类问题:largeHeap=“true”,这不是解决方案