2013-07-21 2 views
2

Я написал код для кнопки, чтобы позволить мне перейти от активности в моем приложении к моей основной деятельности. Но во время запуска произошла ошибка:Как перейти на главную Activtiy

07-21 09: 28: 13.864: E/dalvikvm-heap (371): 25165824-байтовое внешнее распределение слишком велико для этого процесса. 07-21 09: 28: 13.864: E/GraphicsJNI (371): VM не позволит нам выделять 25165824 байт

Я использовал изображение и сохранил его в своей базе данных, но без какой-либо утилизации это проблема? Вот мой код в растровом:

try { 
      Log.d("to get image", "ok"); 
      ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView1); 
      Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageInfo.get(position)).getContent()); 
      imageView.setImageBitmap(bitmap); 
      } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 

Моего приложение предполагает, чтобы получить изображения по умолчанию из YouTube для любого ключевого слова поиска и хранить их в базе данных моей.

+0

Ур Размер изображения большой? – KOTIOS

+0

Опубликовать фрагмент кода. –

+1

Мои изображения являются изображениями по умолчанию для любого youtube видео, поэтому есть большой и маленький – Tolen

ответ

0

Эта ошибка означает, что у вас слишком большое изображение внутри. Проблема здесь в том, что вы получаете утечку памяти. Если вы используете растровые изображения, лучшим способом является использование небольших растровых изображений, которые подходят для нескольких устройств. Если вы используете растровые изображения, также вызывайте recycle(), если это растровое изображение больше не используется. Я рекомендую прочитать это руководство, чтобы использовать Bitmaps:

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

Кроме того, есть альтернатива, если переработка не возможно Вам. Вы можете масштабировать растровое изображение для ваших потребностей, как прекрасно объяснены в другом потоке здесь в StackOverflow:

Strange out of memory issue while loading an image to a Bitmap object

+0

К сожалению, я бы снова использовал растровое изображение. – Tolen

+0

уверен, но только если вы снова начнете основное действие, или? Поэтому при каждом запуске создайте это растровое изображение снова, на каждом конце, переработайте это изображение. – Opiatefuchs

+0

Opiatefuchs: Большое спасибо, я пропустил это и попробую это спасибо. – Tolen

0

программа имеет ограниченный размер кучи (минимум на старых устройствах, как мало, как 16Мбы). Это зависит от каждого устройства, поэтому будьте осторожны при QA. Так как растровое изображение может занимать до 4 байт на пиксель, большие растровые изображения могут легко заполнить вашу кучу (1000 x 1000 пикселей = 3,8 МБ). Кажется, ваше растровое изображение занимает 25 мегабайт, что огромно!

Что это означает, что вы должны быть очень осторожными и использовать несколько тактик, чтобы избежать потери памяти:

  1. Когда вам не нужно растрового изображения больше, освободить его и вызвать bitmap.recycle(), чтобы убедиться, память немедленно освобождается. Если вам понадобится растровое изображение снова в будущем, вы можете загрузить его снова с диска/ресурсов.

  2. Если растровое изображение больше размера вашего экрана, вы можете уменьшить его, чтобы сохранить память. Техника here позволит вам загружать ее первоначально уменьшенную на 2/3/4. Если вам нужна более тонкая настройка, вы можете загрузить ее в полном размере, а затем перемасштабировать, используя Bitmap.createScaledBitmap. Только не забудьте сразу recycle() оригинального растрового изображения.

Обратите внимание, что с масштабированием растрового изображения я не рекомендовал просто изменять размеры исходных изображений. Различные устройства Android имеют разные разрешения. Поэтому я бы сохранил свои исходные изображения достаточно большими, чтобы выглядеть превосходно на устройствах с самым высоким разрешением. У устройств с низким разрешением, как правило, меньше памяти кучи, поэтому масштабирование во время работы позаботится об этом.

+0

Talkol: Большое вам спасибо. – Tolen

+0

уверен :) согласен ответить, если это помогло вам – talkol

+0

talkol: это было бы приятно :) – Tolen