Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Как правильно загружать изображения? - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Нарушение АП в Google play http://www.cyberforum.ru/android-dev/thread1783706.html
Народ, есть приложение в котором из книги вырывается кусочек(обычно не более 5-х слов) и выводится на экран. Вопрос: не забанит ли меня Google, если я выложу ее в Google play? Я думаю что нет потому...
Программирование Android Использование другой версии JSON (org.json) Добрый день. Проблема такая - в библиотеке, которую я использую в проекте, используется org.json:json:20151123 зависимость, в то время как в android по умолчанию вшита другая версия. Вопрос - как... http://www.cyberforum.ru/android-dev/thread1783665.html
Dagger 2 + java 1.8 Программирование Android
Добрый день! Хочу в приложении использовать dagger 2 но я уже использую java 1.8 и у меня возникли проблемы с gradle зависимостями. Если добавить classpath...
Service использует много памяти Программирование Android
Всем привет! у меня есть сервис (IntentService), который работает в отдельном процессе. Суть этого сервиса синхронизировать данные с сервера в локальную БД, это более тысячи запросов к серверу и...
Программирование Android Запуск Activity из другого apk http://www.cyberforum.ru/android-dev/thread1783510.html
Здравствуйте! Попытаюсь максимально собрать мысли в кучу и описать, то что мне надо. Есть скомпилированный apk файл без исходного кода, этот apk подключается в моем проекте с помощью DexClassLoader,...
Программирование Android Заблокировать долгое нажатие на кнопку HOME Здравствуйте! Как заблокировать долгое нажатие на кнопку HOME в своем приложении? P.S. Android 4.2.2 На версиях 5.0+ меню недавних приложений "блокирую" так: @Override protected void... подробнее

Показать сообщение отдельно
AgentZ
0 / 0 / 0
Регистрация: 11.07.2013
Сообщений: 130

Как правильно загружать изображения? - Программирование Android

21.07.2016, 13:21. Просмотров 480. Ответов 12
Метки (Все метки)

Разрабатываю приложение для игры. Уже выпустил тестовую версию и из первой сотни установивших у двух человек вылезла такая ошибка:

Кликните здесь для просмотра всего текста

java.lang.OutOfMemoryError: Failed to allocate a 5266956 byte allocation with 42576 free bytes and 41KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:655)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:488)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:978)
at android.content.res.Resources.createFromResourceStream(Resources.java:3026)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2721)
at android.content.res.Resources.loadDrawable(Resources.java:2607)
at android.content.res.MiuiResources.loadDrawable(MiuiResources.java:393)
at android.content.res.TypedArray.getDrawable(TypedArray.java:751)
at android.widget.ImageView.<init>(ImageView.java:146)
at android.widget.ImageView.<init>(ImageView.java:135)
at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:57)
at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:53)
at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106)
at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:1008)
at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:1067)
at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:729)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:810)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
at android.view.LayoutInflater.inflate(LayoutInflater.java:508)
at android.view.LayoutInflater.inflate(LayoutInflater.java:418)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
at agentz.com.soulhuntersapp.Info.onCreate(Info.java:27)
at android.app.Activity.performCreate(Activity.java:5975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2526)
at android.app.ActivityThread.access$800(ActivityThread.java:169)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5549)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)


Я стал изучать этот вопрос более тщательно и понял, что изображения надо как-то оптимизировать... У меня в ресурсах изображений более 500 штук, каждое примерно 500х900 и по 100-200кб.
Я еще не знаю все нюансы программирования для андроид и для изображений использовал массивы int[][], в которые загружаются картинки с ресурсов и в нужные моменты по индексу загружаются в нужный ImageView методом .setImageResource(array1[int][int]);

Вот, например, так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 if (!Hero.awake[ID]) 
{
            s5.setVisibility(View.GONE);
            layoutSkill5.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0f));
 
            picHero.setImageResource    (Hero.img[ID][1]);
 
        } else {
            Hero leg = new Hero(this);
            leg.createLegPics(); //Создание массива с изображениями легендарных героев
 
            picHero.setImageResource(Hero.imgLeg[ID]);
            s5.setImageResource     (Hero.img[ID][6]);
        }
 
 
        s1.setImageResource         (Hero.img[ID][2]);
        s2.setImageResource         (Hero.img[ID][3]);
        s3.setImageResource         (Hero.img[ID][4]);
        s4.setImageResource         (Hero.img[ID][5]);
 
        tvName.setText                 (Hero.hero[ID][0]);
        tvDescription.setText          (Hero.hero[ID][9]);

Лично у меня на девайсе и еще у сотни человек такой ошибки не было. Но у двоих такая вот беда. Я понял, что есть косяк. Хочу попросить помощи в правильной прогрузке изображений. Если это дело не пары секунд, то могу заплатить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru