Android Outofmemory можно рисовать
Это мой drawable в массиве для моего 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;
}
6 ответов
Это известная ошибка, но не из-за больших файлов. Так как Android кэширует Drawables, ему не хватает памяти после использования нескольких изображений. Но я нашел альтернативный способ, пропустив систему кеширования Android по умолчанию.
Soultion: создайте в ресурсах папку для рисования и переместите изображения в папку "Drawable" в активах и используйте следующую функцию для получения 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);
}
Ссылка: https://stackru.com/posts/6116316/revisions
Кроме того, добавьте строку ниже в вашем файле манифеста
android:largeHeap="true"
Попробуйте переместить ваши элементы рисования с более низкого MPI на HDPI или даже в папки более высокого размера, такие как XHDPI, в зависимости от вашего разрешения.
Размеры моих изображений варьировались от 400 до 800 пикселей. Я сохранил свои рисованные объекты в MDPI, который выбрасывал OutOfMemory на моем Galaxy S4. Я переместил их в HDPI, и это решило проблему.
Как упомянул Мухаммед, попробуйте переместить ваши изображения с возможностью рисования(или MDPI) в другую папку измерений, как HDPI или выше.
Всегда старайтесь использовать сжатые PNG, насколько это возможно. Есть много онлайн-сайтов, которые можно сжать в очень большом масштабе.
ссылка: http://developer.android.com/guide/practices/screens_support.html
Пока ваши изображения не очень большие по размеру, вы можете использовать папку drawable-nodpi для ваших PNG. Я могу подтвердить, что это решило проблему для меня.
Добавлять android:largeHeap:"true"
в свой файл манифеста и переместите ваши нарисованные изображения в папку mipmap-hopi
,
[android] [java] [android-studio]
@Muhammad, упомянутый здесь ранее, создание нескольких изображений (hdpi, ldpi,mdpi,xdpi и т. д.) решило проблему для меня.
потому что мне потребовалось некоторое время, чтобы понять, как добавить эти файлы, вот несколько экранов печати, которые объясняют это:
Drawable ->New -> Batch Drawable Import (для нескольких файлов)
затем добавьте файлы и затем выберите разрешения