1С мобильное приложение падает из за нехватки памяти Java
При работе в мобильном приложении с большим количеством картинок рано или поздно 1с падает с ошибкой о нехватке памяти. ВременноеХранилище при закрытии форм отчищается. Есть у кого ни будь умные мысли как с этим бороться. Или это крест мобильной платформы и исправление стоит ждать когда Обама снова станет президентом) Вот ошибка:
java.lang.OutOfMemoryError: Failed to allocate a 630996 byte allocation with 439192 free bytes and 428KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:831)
at android.graphics.Bitmap.createBitmap(Bitmap.java:808)
at android.graphics.Bitmap.createBitmap(Bitmap.java:739)
at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:615)
at com.e1c.mobile.c.a(Unknown Source)
at com.e1c.mobile.UIView.onDraw(Unknown Source)
at android.view.View.draw(View.java:16184)
at com.e1c.mobile.UIView.draw(Unknown Source)
at android.view.View.updateDisplayListIfDirty(View.java:15180)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.View.draw(View.java:15954)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.draw(View.java:16187)
at com.e1c.mobile.UIView.draw(Unknown Source)
at android.view.View.updateDisplayListIfDirty(View.java:15180)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.View.draw(View.java:15954)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.draw(View.java:16187)
at com.e1c.mobile.UIView.draw(Unknown Source)
at android.view.View.updateDisplayListIfDirty(View.java:15180)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:281)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:287)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:322)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2614)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2433)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2066)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1112)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6029)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5480)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
java.lang.OutOfMemoryError: Failed to allocate a 630996 byte allocation with 439192 free bytes and 428KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:831)
at android.graphics.Bitmap.createBitmap(Bitmap.java:808)
at android.graphics.Bitmap.createBitmap(Bitmap.java:739)
at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:615)
at com.e1c.mobile.c.a(Unknown Source)
at com.e1c.mobile.UIView.onDraw(Unknown Source)
at android.view.View.draw(View.java:16184)
at com.e1c.mobile.UIView.draw(Unknown Source)
at android.view.View.updateDisplayListIfDirty(View.java:15180)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.View.draw(View.java:15954)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.draw(View.java:16187)
at com.e1c.mobile.UIView.draw(Unknown Source)
at android.view.View.updateDisplayListIfDirty(View.java:15180)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.View.draw(View.java:15954)
at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
at android.view.View.draw(View.java:16187)
at com.e1c.mobile.UIView.draw(Unknown Source)
at android.view.View.updateDisplayListIfDirty(View.java:15180)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573)
at android.view.View.updateDisplayListIfDirty(View.java:15140)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:281)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:287)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:322)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2614)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2433)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2066)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1112)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6029)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5480)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Я думаю Обама вам таки не поможет, вам же не подъезды осквернять нужно, а 1С своим творчеством))) А вот мастерская дядюшки Цинь Ляо вам поможет: рут телефона, приоритет аппликейшона 1С на максимум (чтобы андроид его не "убивал"), и виртуальную память поднять тоже посильнее. Ну и для большого неба - большие самолеты, а не старички 2014-15 гг выпуска.
ИЛИ записывать свои данные почаще, разбивать видео на фрагменты, для этого вам поможет "обработчикОжидания" и "объект.Записать()".
Если нужны приложения - пишите, вечером в истории загрузок поищу
ИЛИ записывать свои данные почаще, разбивать видео на фрагменты, для этого вам поможет "обработчикОжидания" и "объект.Записать()".
Если нужны приложения - пишите, вечером в истории загрузок поищу
Спасибо за нотку оптимизма) Вся каша варится в обработке. Загружается прайс с центральной базы через web и записывать там нечего. Приложение для сотрудников, партнеров и в дальнейшем для розничных пользователей. Соответственно все должно быть Plug&Play. Ломать хребет андройду пользователи не смогут) В моем понимании если я закрываю форму обработки, да и саму обработку память должна отчищается, но на деле память накапливается и даже после непродолжительного юзанья обработки при ее закрытии и повторном открытии все надежды разбиваются об веру в мобильное приложение 1С) Можно ли как то из 1с влиять на ее очищение перед кодом праведным)
(4) Берите пример с Нова Пошта: их АПИ выдает по 500 результатов на запрос, и параметр №3 - номер "страницы".
Потом очищайте вручную все переменные, то есть а=неопределено,б=неопределено итд
N=0;
Пока Истина цикл
ОТвет=Вебсервис.получитьДанные(х,у,z,N)
Если ответ.Количество()=0 тогда
прервать
//загружаете данные
//Выдавайте ХХХ результатов на сервере
N=N+1;
Конеццикла
ПоказатьПотом очищайте вручную все переменные, то есть а=неопределено,б=неопределено итд
Фотографии сжаты до 30 кб. При ответе сервер передает одновременно размер фотографий. Вобщем 1 форма выдерживет 7000кб. Поэтому после 5000кб (с запасом) я сделал открытие новой подчиненной формы (страницы). До 3 страниц открывает спокойно.
С каждым открытием новой подчиненной страницы я отчищаю ссылки на фото текущей.
При возвращении на эту страницу востанавливаю фото
При закрытии на всякий случай отчищаю ВременноХранилище (хотя это должно проходить автоматически т.к. во ВременномХранилище Ид формы)
Если все закрыть и начать заново, то через какое то время все валится. Помогает только полное закрытие и открытие приложения
С каждым открытием новой подчиненной страницы я отчищаю ссылки на фото текущей.
СсылкиФотоВХранилище = ЭтаФорма.СсылкиФотоВХранилище;
Для Каждого ТекСсылка Из СсылкиФотоВХранилище Цикл
ЭтотОбъект[ТекСсылка.Значение] = Неопределено;
КонецЦикла;
При возвращении на эту страницу востанавливаю фото
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "Прайс" + Строка(ТекущаяСтраница) Тогда
СсылкиФотоВХранилище = ЭтаФорма.СсылкиФотоВХранилище;
Для Каждого ТекСсылка Из СсылкиФотоВХранилище Цикл
ЭтотОбъект[ТекСсылка.Значение] = ТекСсылка.Представление;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
ПоказатьПри закрытии на всякий случай отчищаю ВременноХранилище (хотя это должно проходить автоматически т.к. во ВременномХранилище Ид формы)
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
СсылкиФотоВХранилище = ЭтаФорма.СсылкиФотоВХранилище;
Для Каждого ТекСсылка Из СсылкиФотоВХранилище Цикл
УдалитьИзВременногоХранилища(ТекСсылка.Представление);
КонецЦикла;
КонецПроцедуры
ПоказатьЕсли все закрыть и начать заново, то через какое то время все валится. Помогает только полное закрытие и открытие приложения
(7) хмм, у меня была передача фоток "все разом", нас было 9 тел, а фоток приблизительно 900, то есть по 100 фоток (читай по 100 мб) в пакете, и не валилось. тогда
1) попробуй даунгрейд до 8.3.6, ибо все было на ней
2) тебе нужно именно выводить? записывай каждую фото как есть (хранище значения=хранилище значения), а выводи не все пачкой на странице, а как то динамически выводить
3) попробуй рутануть и "апгрейдить" свой аппарат. Если МП с смартфоном ведет себя как 7.7 с многоядерным процессором - то есть берет сколько ресурсов, сколько написано в коде и плевать что это 9s гелекси, то....
1) попробуй даунгрейд до 8.3.6, ибо все было на ней
2) тебе нужно именно выводить? записывай каждую фото как есть (хранище значения=хранилище значения), а выводи не все пачкой на странице, а как то динамически выводить
3) попробуй рутануть и "апгрейдить" свой аппарат. Если МП с смартфоном ведет себя как 7.7 с многоядерным процессором - то есть берет сколько ресурсов, сколько написано в коде и плевать что это 9s гелекси, то....
Валится при выводе на ЭлементФормы картинка. Примерно получается после 500 фоток. На одной форме вывожу по 150 картинок. Для оперативности каждый вызов по 30 штук, далее кнопка "показать еще" т.к. для самой формы событие конца формы нет (а его так не хватает). Пробовал сейчас дополнительно удалять все элементы и реквизиты, тоже самое. На 6 и 7 Андройде тоже самое. Живых ссылок на 8.3.6 найти не могу. Они наверно в одном плосту с динозаврами). А можно поподробней "записывай каждую фото как есть (хранище значения=хранилище значения)"
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот