2016-03-06 3 views
-1

Привет, я делал проект из школы, и когда я запускал приложение, у меня есть ошибка трассировки стека, показанная ниже.Ошибка памяти

03-06 14:58:02.520 11265-11265/com.example.ray.cdmsv2 E/AndroidRuntime: FATAL EXCEPTION: main 
                     java.lang.OutOfMemoryError 
                      at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
                      at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596) 
                      at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444) 
                      at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:832) 
                      at android.content.res.Resources.loadDrawable(Resources.java:2988) 
                      at android.content.res.Resources.getDrawable(Resources.java:1558) 
                      at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173) 
                      at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:937) 
                      at android.graphics.drawable.Drawable.createFromXml(Drawable.java:873) 
                      at android.content.res.Resources.loadDrawable(Resources.java:2970) 
                      at android.content.res.Resources.getDrawable(Resources.java:1558) 
                      at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:323) 
                      at android.support.v7.widget.TintManager.getDrawable(TintManager.java:147) 
                      at android.support.design.widget.TabLayout$Tab.setIcon(TabLayout.java:1080) 
                      at com.example.ray.cdmsv2.Activities.CreateTaskActivity.onCreate(CreateTaskActivity.java:102) 
                      at android.app.Activity.performCreate(Activity.java:5372) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2362) 
                      at android.app.ActivityThread.access$700(ActivityThread.java:168) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329) 
                      at android.os.Handler.dispatchMessage(Handler.java:99) 
                      at android.os.Looper.loop(Looper.java:137) 
                      at android.app.ActivityThread.main(ActivityThread.java:5493) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:525) 

Я искал решение, но я все еще не могу решить проблему. Мое приложение может работать плавно на Samsung Galaxy A3. Однако, когда я пытался запустить мое приложение на S4 и Note 4, я получаю ошибку из памяти. Я понял, что когда я реализую какой-то селектор в моем drawable, который я вызываю в своих XML-файлах, это вызовет ошибку, однако, когда я удалю его, ошибка больше не возникает. Есть ли объяснения по этому вопросу? Большое спасибо за то, что вы помогли мне.

+0

Возможно, вы не используете память эффективно. Различные устройства имеют разные спецификации, вы должны, вероятно, попытаться масштабировать, сколько памяти вы используете в отношении того, насколько активно вы располагаете. – JoxTraex

+0

Сжимайте размер изображения, которое вы используете. Так просто!!! Или предпочитайте использовать векторы. Проверьте материальную базу данных – Sibidharan

+0

Проверьте свои размеры изображения и постарайтесь как можно меньше уменьшить размер – Pooya

ответ

0

Удалите выталкиваемый и импортируйте его снова, используя параметр ImageAsset.

Ошибка в изображении слишком тяжелая, чтобы загрузить его в память. Или лучше сжать изображение перед его копированием в папку Drawable.

0

Я хотел бы начать с обучением некоторых лучших практик использования памяти Google на Девых документах @ http://developer.android.com/training/displaying-bitmaps/index.html

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

+0

FYI. Этот ответ теперь находится в очереди низкого качества; Я предполагаю, что это был флаг NAA от кого-то, кто принял его за ответ только для ссылок. Я думаю, было бы неплохо подробно рассказать об использовании памяти. –

0

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

Если это значок, используйте встроенный генератор Image Asset для Android, чтобы создавать соответствующие размеры изображений для каждого типа отображения (mdpi, hdpi, xhdpi, xxhdpi и т. Д.). Если это изображение загружается в ImageView, вы можете попробовать использовать библиотеку Picasso, которая будет обрабатывать растровую память самостоятельно.

Смежные вопросы