Перейти к содержанию
Fire Monkey от А до Я

Alex7wrt

Пользователи
  • Постов

    508
  • Зарегистрирован

  • Посещение

  • Победитель дней

    31

Сообщения, опубликованные Alex7wrt

  1. Добрый день.
    Интересует как можно сделать, чтобы неактивный элемент (enabled=false) отображался в таком же виде как и активный (не менял свой цвет).

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

    Думал про это, но есть сомнения по поводу плавности прокрутки.

     

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

    Спасибо за совет!

     

    От 70мб занятой RAM приложение не будет вылетать. Проблема не в этом.

    Мб утечки? На пустом приложении с листвью тоже самое?

    У меня не вылетает, а не всегда запускается. 

  3. Картинки png. Через deploy используются двумя способами: 

     

    1.  image.Bitmap.LoadFromFile('some.png'); - 2 штуки
     

    2.  it:=listview1.Items.Add;

         ..................................
         it.bitmap.LoadFromFile('some.png');   - 160 штук для списка в listview.
     
    Раньше делал через it.bitmapref:=png, что по-моему тоже самое. Просто тут массив картинок, на которые ссылаются битмапы item-ов в listview. А так как написано в пункте 2 - без массива, но у каждого итема свой собственный битмап.

    Еще есть 4 картинки, но они погоду не строят.
     

    Значит вы их загружаете в память сами.

     

     

    Да, я загружаю в контейнеры listview (пункт 2) и в два timage (пункт 1). Картинки размером около 220 на 150 пикселей.

    Что в итоге дает 220*150*(160+2)*4 = 20 МБ.

     

    Если пункт 2 заменить на 

            it:=listview1.Items.Add;

            ...................................

            b:=tbitmap.Create; b.LoadFromFile('some.png');
            it.Bitmap:=b.CreateThumbnail(80,56);

    то экономится около 20 МБ памяти.

     

    При этом, приложение занимает 70 МБ, корме картинок больше ничего ресурсоемкого нет.

    По моим оценкам, оно должно занимать не более 20-30 МБ памяти .

  4. После  оптимизации загрузки ресурсов "по надобности", использование RAM в Windows снизилось с 42 МБ до 12 МБ. При этом в Android с 73 до 60 МБ. По-моему это очень нелогично. Единственное объяснение, которое я нахожу, сводится к тому, что Android при запуске приложения грузит все ресурсы в оперативку, не зависимо от их вызова. А при загрузке ресурса в контейнер выделяет еще память. Приложение, которое весит 13 МБ, после установки занимает около 44 МБ в Android (думаю, PNG файлы ресурсов сразу конверитруются в BMP перед установкой). И почти все эти 44 МБ грузятся в RAM при каждом запуске, а остальное выделяется уже по коду. Кто-нибудь знает, так ли это и если так, то можно ли сделать, чтобы RAM под ресурсы выделялась только при их загрузке в самом коде? Может какая настройка в Delphi XE, отвечающая за ресурсы? Я такой не увидел.

  5. Загружая картинку в TBitmap она хранится там именно как PMB и занимают {censored} сколько места. Сам не понимал почему у меня приложение на IOS без конца вылетало, потом глянул сколько памяти уходит при загрузке изображений и {censored}.

    Правильно я понимаю, что после оптимизации приложение вылетать перестало? 

     

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

    Логичный и хороший совет. Спасибо. Правда все-же хотелось бы как-то уменьшить объем занимаемой ими памяти.

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

    У меня все-равно запускается не с 1-го раза. Подробнее в исходной теме: http://fire-monkey.ru/topic/1053-chastye-sboi-prilozheniia-pri-popytke-zapuska-android/

  7. лучше без фильтра )

    глянь http://fire-monkey.ru/topic/1046-reshenie-segmentation-fault11-ili-axe-beats-in-the-balls

    авось поможет )

    Попробовал с процедурой KillMe из этого модуля в FormClose. Результат - мне не помогло. Может этот способ помогает с закрытием приложений, но мои проблеммы,связанные с запуском, остались.

    Я тут обнаружил, что одно приложение занимает около 70МБ RAM. На смартфоне с 512 МБ RAM виснет при запуске ощутимо чаще, чем на планшете с 1024 МБ. (интересно, что было бы на девайсе с 256 МБ...). То есть возникла логическая цепочка по поводу слишком большых требований к RAM. Но изменение настроек LargeHeap в VersionInfo на True не помогает,(хотя и не хочется трогать этот параметр). Поэтому все так же теряюсь в догадках по поводу причины сбоев. Но простейшие приложения всегда запускаются без проблем.

     

    В этой связи, если все же догадки по поводу памяти верны, возникает такой вопрос:

    В приложении используются PNG изображения в качестве ресурсов. Сами по себе файлы, в которых всего несколько цветов, весят очень мало. Но, насколько я понимаю, при загрузке в tbitmap на каждый пиксель выделяется 4 байта (3 на цвета и 1 на прозрачность), то есть в памяти это изображение png хранится как полноцветный bmp с альфа-каналом? Если так, то на изображения уходит очень много памяти.

    Поэтому вот собственно и вопрос: есть ли способ хранить в RAM исходный png, а не BMP? Хотя, как я понимаю, изображение, закодированное таким образом, нельзя редактировать. Но неужели во всех приложениях с графикой в памяти все изображения хранятся как битмапы? Прошу тех, кто владеет темой, объяснить сей момент. 

  8. Несколько приложений, созданных в Delphi XE 7, не всегда корректно запускаются. Иногда запускаются нормально и работают очень долго, пока не зкароешь, а иногда не запускаются. Появляется заставка и на этом все заканчивается. Не могу понять в чем причина и в какую сторону копать. Приложения разные, но в обоих есть загрузка ресурсов. Но ресурсы не тянут на много. Максимум - до 10 МБ, причем в этом приложении процент неудачных загрузок намного меньше. Проверено на 2-х Android устройствах (сматрфоне и планшете).

    Прошу подсказать, в какую сторону смотреть. Может быть, как-то контролировать процесс запуска или еще что-то.

    Заранее спасибо.

×
×
  • Создать...