|
0 / 0 / 1
Регистрация: 11.07.2013
Сообщений: 136
|
||||||
Как правильно загружать изображения?21.07.2016, 13:21. Показов 2096. Ответов 12
Метки нет (Все метки)
Разрабатываю приложение для игры. Уже выпустил тестовую версию и из первой сотни установивших у двух человек вылезла такая ошибка:
Кликните здесь для просмотра всего текста
java.lang.OutOfMemoryError: Failed to allocate a 5266956 byte allocation with 42576 free bytes and 41KB until OOM at dalvik.system.VMRuntime.newNonMovableArr ay(Native Method) at android.graphics.BitmapFactory.nativeDec odeAsset(Native Method) at android.graphics.BitmapFactory.decodeStr eam(BitmapFactory.java:655) at android.graphics.BitmapFactory.decodeRes ourceStream(BitmapFactory.java:488) at android.graphics.drawable.Drawable.creat eFromResourceStream(Drawable.java:978) at android.content.res.Resources.createFrom ResourceStream(Resources.java:3026) at android.content.res.Resources.loadDrawab leForCookie(Resources.java:2721) at android.content.res.Resources.loadDrawab le(Resources.java:2607) at android.content.res.MiuiResources.loadDr awable(MiuiResources.java:393) at android.content.res.TypedArray.getDrawab le(TypedArray.java:751) at android.widget.ImageView.<init>(ImageVie w.java:146) at android.widget.ImageView.<init>(ImageVie w.java:135) at android.support.v7.widget.AppCompatImage View.<init>(AppCompatImageView.java:57) at android.support.v7.widget.AppCompatImage View.<init>(AppCompatImageView.java:53) at android.support.v7.app.AppCompatViewInfl ater.createView(AppCompatViewInflater.ja va:106) at android.support.v7.app.AppCompatDelegate ImplV7.createView(AppCompatDelegateImplV 7.java:1008) at android.support.v7.app.AppCompatDelegate ImplV7.onCreateView(AppCompatDelegateImp lV7.java:1067) at android.support.v4.view.LayoutInflaterCo mpatHC$FactoryWrapperHC.onCreateView(Lay outInflaterCompatHC.java:44) at android.view.LayoutInflater.createViewFr omTag(LayoutInflater.java:729) at android.view.LayoutInflater.rInflate(Lay outInflater.java:810) at android.view.LayoutInflater.rInflate(Lay outInflater.java:813) at android.view.LayoutInflater.inflate(Layo utInflater.java:508) at android.view.LayoutInflater.inflate(Layo utInflater.java:418) at android.view.LayoutInflater.inflate(Layo utInflater.java:365) at android.support.v7.app.AppCompatDelegate ImplV7.setContentView(AppCompatDelegateI mplV7.java:280) at android.support.v7.app.AppCompatActivity .setContentView(AppCompatActivity.java:1 40) at agentz.com.soulhuntersapp.Info.onCreate( Info.java:27) at android.app.Activity.performCreate(Activ ity.java:5975) at android.app.Instrumentation.callActivity OnCreate(Instrumentation.java:1111) at android.app.ActivityThread.performLaunch Activity(ActivityThread.java:2417) at android.app.ActivityThread.handleLaunchA ctivity(ActivityThread.java:2526) at android.app.ActivityThread.access$800(Ac tivityThread.java:169) at android.app.ActivityThread$H.handleMessa ge(ActivityThread.java:1421) at android.os.Handler.dispatchMessage(Handl er.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(Activity Thread.java:5549) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.j ava:372) at com.android.internal.os.ZygoteInit$Metho dAndArgsCaller.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]); Вот, например, так:
Лично у меня на девайсе и еще у сотни человек такой ошибки не было. Но у двоих такая вот беда. Я понял, что есть косяк. Хочу попросить помощи в правильной прогрузке изображений. Если это дело не пары секунд, то могу заплатить.
0
|
||||||
| 21.07.2016, 13:21 | |
|
Ответы с готовыми решениями:
12
Как правильно загружать изображение и Bitmap compress при большом объеме фото Как правильно загружать изображения?
|
|
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
|
|
| 21.07.2016, 14:46 | |
|
Из ресурсов в массив, из массива в ImageView. A почему не из ресурсов в ImageView? Зачем посредники?
0
|
|
|
0 / 0 / 1
Регистрация: 11.07.2013
Сообщений: 136
|
|
| 21.07.2016, 15:02 [ТС] | |
|
OlegJV, чтобы можно было перебрать по имени и при совпадении выставить ID, с помощью которого я уже беру из всех массивов нужную информацию по нужному ID. Я не придумал, как это можно сделать не массивом =(
Добавлено через 7 минут Я ведь не могу при каждом запросе делать if (name==ivan) pic.setImageResource(R.drawable.ivan) и так далее на каждую картинку. Либо я чего-то не знаю, подскажите плиз
0
|
|
|
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
|
|
| 22.07.2016, 20:57 | |
|
AgentZ, научитесь пользоваться кэширующими библиотеками для изображений: Glide, Fresco, Picasso.
Изучите Soft Reference. Не используйте массивы в Яве, это очень неудобный способ программирования, используйте коллекции.
1
|
|
|
0 / 0 / 1
Регистрация: 11.07.2013
Сообщений: 136
|
|
| 23.07.2016, 12:19 [ТС] | |
|
CoolMind, Спасибо, буду пробовать.
Насчет Picasso: Я правильно понимаю, что вместо "imageview.setImageResource(Hero.img[1][0])" мне нужно использовать "Picasso.with(Main.this).load(Hero.img[1][0]).into(imageview)"? (Сейчас опускаю массивы, с коллекциями буду разбираться)
0
|
|
|
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
|
|
| 23.07.2016, 15:11 | |
Сообщение было отмечено AgentZ как решение
Решение
AgentZ, не за что! Я уже не помню порядок инициализации и использования, но, скорее всего, вы правы, там библиотека сама решает, как именно загружать изображение.
1
|
|
| 25.07.2016, 02:41 | |
|
0
|
|
|
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
|
||
| 25.07.2016, 07:06 | ||
|
0
|
||
|
0 / 0 / 1
Регистрация: 11.07.2013
Сообщений: 136
|
|
| 26.07.2016, 11:03 [ТС] | |
|
CoolMind, хм, если только в этом суть, может тогда мне не заморачиваться? Ведь в работе приложения у меня уже готовые списки. Если в них и нужно что-то добавлять, то это происходит параллельно с добавлением новых ресурсов - изображений и ещё всякой ерунды
) что собственно я и делаю, выпуская обновление в Гугл плей.
0
|
|
|
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
|
||
| 26.07.2016, 13:01 | ||
|
1
|
||
|
0 / 0 / 1
Регистрация: 11.07.2013
Сообщений: 136
|
|
| 26.07.2016, 15:17 [ТС] | |
|
CoolMind, Да, я уже разобрался достаточно с ArrayList. Действительно работать с ним удобно. Но в данный момент мне нужны статические списки ) Спасибо
0
|
|
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
|
| 26.07.2016, 15:34 | |
|
для каждого случая - своё
если количество элементов постоянное - массив, если нет - лист массив на 10000 int-ов и ArrayList на 10000 Integer-ов разница будет ощутимая десять тысяч объектов вместо одного (массива) + доступ к элементам в листе через get полюбому на децл медленнее чем напрямую к элементам массива ну и есть еще случаи когда нужны двух или трехерные массивы кто-нибудь рискнет писать это на листах?
0
|
|
|
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
|
||
| 26.07.2016, 15:42 | ||
|
Если массивы растут по каждому измерению, то, пожалуй, только на листах и надо писать. Добавлено через 2 минуты Но могу ошибаться, смотря, как сделать на массивах.
0
|
||
| 26.07.2016, 15:42 | |
|
Помогаю со студенческими работами здесь
13
Как правильно загружать БД SQL на хостинг? Как правильно загружать и раздавать видео?
Запретить webbrowser загружать изображения? Как "по учебнику" загружать правильно iptables в Ubuntu? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|