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

Поиск сообщества

Показаны результаты для 'памяти'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Общие вопросы
    • Анимация
    • Графика
    • Стили
    • Базы данных и REST
    • Компоненты
    • Положение, размеры, выравнивание
    • Работа с текстом
    • Приложение и формы
    • Отладка
    • Развертывание приложений
    • Вопросы по языку Object Pascal и RTL
    • Общая информация о TControl
    • События
    • Прочие вопросы
  • Вопросы по платформам
    • Android
    • iOS
    • OSX
    • Windows
    • Windows Phone
    • Linux
  • Вопросы по использованию RAD Studio
    • Лицензирование
    • Сборка проектов
    • Multi-Device Designer
    • Редактор кода
    • Вопросы
  • Обучение
    • Основная информация
    • Вопросы
    • Отзывы
  • Поиск специалистов по FireMonkey
    • Консультации
    • Ищу подрядчика
  • Дополнительные ресурсы по FireMonkey
    • Сторонние компоненты
    • Приложения, написанные с использованием FireMonkey
    • Примеры
    • Руководства
    • Шаблоны
    • Статьи и заметки
    • Информация о версиях RAD Studio
    • Новости
  • Организация работы данного форума

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


StackOverflow


Защита от ботов


Город


Интересы

  1. Ломать не строить, здесь нет ни каких сложностей. TImageList содержит две коллекции Source и Destination. Удаляете из них Item`ы как из обычных коллекций TCollection с помощью методов Delete и Clear. В Source находятся сами изображения, в Destination ссылки на Source. Если удалите только из Source, то в нумерация изображений не поменяется и останутся пустые элементы, хотя расход памяти уменьшится. Если удалите только из Destination, то нумерация картинок съедет, и расход памяти почти не изменится. Каждый элемент Destination может содержать несколько ссылок на Source это коллекция Layers, из которой точно также можно удалять элементы.
  2. Как я понял проблема возникает если при удалении фрейма когда у одного из элементов ввода данных стоит фокус. Я решил эту проблему следующим способом. Моя функция может переключать на следующий фрейм двумя способами. Первый с очищением из памяти старого фрейм, второй без очистки, это удобно когда необходимо вызвать какой нибудь маленький фрейм и при этом, чтоб данные предыдущего фрейм не потерялись. Я например использую вызов фрейм настройки и обновление конфигурации вторым способом При переключении на новый фрейм я вначале делаю очистку активного фокуса текущего фрейм (необходимо если используется переключение без очистки предыдущего фрейм) и очистку фокуса старого фрейм при помощи процедуры ControlsResetFocus, ее тело описано ниже function TfmMain.ActiveFrame(AFrameClass: TFrameClass; ADisposePrevFrame: Boolean): TFrame; var AFrame: TFrame; AIdx: Integer; begin if FFrame <> nil then begin //Сбрасываем форкус элементов текущего активного фрейма ControlsResetFocus(FFrame); //Если новый фрейм отличается от текущего if FFrame.ClassType <> AFrameClass then //Ишем старые фреймы созданные от этого класса для очистки for AIdx := 0 to ComponentCount - 1 do begin if Components[AIdx].ClassType = AFrameClass then begin AFrame := TFrame(Components[AIdx]); //Сбрасываем форкус элементов старого фрейма ControlsResetFocus(AFrame); //Освобождаем старый фрейм из памяти AFrame.Parent := nil; AFrame.DisposeOf; AFrame := nil; Break; end; end; end; if ADisposePrevFrame then begin if FFrame <> nil then begin FFrame.DisposeOf; FFrame := nil; end; FFrame := AFrameClass.Create(Self); FFrame.Parent := Self; FFrame.Align := TAlignLayout.Client; Result := FFrame; end else begin Result := AFrameClass.Create(Self); Result.Parent := Self; Result.Align := TAlignLayout.Client; end; mvMenu.HideMaster; Application.ProcessMessages; end; unit uFunctions; interface uses FMX.Controls, FMX.Edit; procedure KeyboardHide; procedure KeyboardShow(AEdit: TEdit); procedure ControlsResetFocus(Control: TControl); implementation uses FMX.Platform, FMX.VirtualKeyboard; procedure KeyboardHide; var KeyboardService: IFMXVirtualKeyboardService; begin // Запрашиваем сервис виртуальной клавиатуры if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.HideVirtualKeyboard; end; procedure KeyboardShow(AEdit: TEdit); var KeyboardService: IFMXVirtualKeyboardService; begin // Запрашиваем сервис виртуальной клавиатуры if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.ShowVirtualKeyboard(AEdit); end; procedure ControlsResetFocus(Control: TControl); procedure ResetFocus(SubControl: TControl); var AIdx: Integer; AControl: TControl; begin for AIdx := 0 to SubControl.ChildrenCount - 1 do if SubControl.Children.Items[AIdx] is TControl then begin AControl := SubControl.Children.Items[AIdx] as TControl; AControl.ResetFocus; if AControl.ChildrenCount > 0 then ResetFocus(AControl); end; SubControl.ResetFocus; end; begin KeyboardHide; ResetFocus(Control); end; end. Ниже приведен код очистки фреймов "Настройка" и "Обновление конфигурации" из памяти Настройка procedure TfrOptions.SaveClick(Sender: TObject); begin with fmMain do begin Options.UrlServer := edUrlServer.Text; Options.Save; ControlsResetFocus(Self); Self.Parent := nil; Self.DisposeOf; end; end; Обновление конфигурации procedure TfrLogin.StartUpdateCfgClick(Sender: TObject); var AFrame: TfrUpdateCfg; AStatus: TfrUpdateCfgStatus; begin with dmMainModule, fmMain do begin AStatus := ucsEndNormal; if InetConnectState then begin AFrame := TfrUpdateCfg(ActiveFrame(TfrUpdateCfg, False)); AStatus := AFrame.Start; ControlsResetFocus(AFrame); AFrame.Parent := nil; AFrame.DisposeOf; AFrame := nil; end; ....
  3. Это касается ARC компиляторов, Android, iOS и будущего Linux. Если контейнер владелец, содержит классы, которые используют анонимный метод для общения с ним (классом владельцем), то такая конструкция порождает утечку памяти из-за появления циклической ссылки. Т.к. при присваивании анонимного метода инкрементируется счетчик ссылок и не меняется. Причем это не указано в хелпе. А дело было так - при вызове MyCore.Free класс не уничтожался - не вызывался деструктор из за того, что после вызова Free, счетчик ссылок (reference Count) был равен 1. Приходилось пользоваться DisposeOf. Решил разобраться. Для этого перекрыл виртуальные методы TObject отвечающие за изменения счетчика объекта (см. также полный пример ниже). function __ObjAddRef: Integer; override; function __ObjRelease: Integer; override; Итак TCore содержит класс TTestClass - у которого есть событие OnMyEvent. Прототип описан как анонимная процедура - TAnonymProc = reference to procedure; При указании анонимной процедуры, т.е. : procedure TCore.SetEvent; begin fTest.OnMyEvent := procedure () begin fSetFlag := true; end; end; счетчик ссылок TCore увеличивается на 1 и не изменяется при выходе из SetEvent. Теперь при вызове Free TCore - не будет вызван деструктор, который должен уничтожит классы TCore и TTestClass и произойдет утечка памяти. Решение : 1. Использовать слабые ссылки - weak, в нашем примере добавить атрибут [weak]: TTestClass = class strict private [weak]fOnMyEvent:TAnonymProc; public property OnMyEvent: TAnonymProc read fOnMyEvent write fOnMyEvent; end; При присваивании объекта в переменную со слабой ссылкой не происходит увеличение счётчика ссылок объекта на единицу. Аналогично, при очистке слабой ссылки не происходит уменьшение счётчика объекта на единицу. 2. Не использовать анонимные методы, а использовать обычные указатели на метод: Вместо TAnonymProc = reference to procedure; используем классический TAnonymProc = procedure of object; Демо пример, где можно отследить утечку прикрепил. Полный код: AnonMethodsCycle.zip
  4. Да кстати это плохая практика. К примеру под iOS если программа потребляет много памяти сначала получает didReceiveMemoryWarning, затем автоматом убивается системой. Android попроще в этом плане, но тоже особо не жалует, и если такая прога будет в фоне, и как только потребуется память, то первыми на вылет. В общем это не Винда с ее "бесконечным" виртуальным свопом.. И хотя игрушки тянут гораздо больше памяти, а FMX гораздо меньше, но все такие вы должны быть в курсе.
  5. Kitty,а вы попробуйте переустановить свое приложение.Удалить и заново поставить.Получите +1 к пушам. Было 3,станет 4.Больше переустановок,больше пушей. Когда работал с Kinvey была такая же история.В блогах на Embarcadero обсуждали даже.Если в кратце и по памяти,то при переустановке приложения,в Kinvey дублируется запись устройства на которое отправляется push.Что бы избежать этого,надо делать доп проверку на уже существующий токен для данного устройства.Повторюсь что это по памяти,но суть понятна.Можете поискать в блогах Sarina Dupont на Embarcadero. Собственно после этого я и перешел на нативные пуши. Потому как написал многоуважаемый ZuBy: Вот,нашел: https://community.embarcadero.com/blogs/entry/remote-push-notifications-on-android-with-rad-studio-xe6-795 Второй коммент. 15 раз установил,15 пушей.
  6. Среди прочего дошли руки до проекта этой темы. Провожу краш тесты с TIdHTTPServer. Все как описано раньше, сервер, пул данных, критические секции. На localhost нагружаю эмулятором с удержанием соединения, как ни удивительно, но до 1500 запросов в секунду он держался. Это уже больше чем я ожидал, 1500 соединений по запросу в секунду, однако... Вылетает он после этого в ListenException, с сообщением "Недостаточно памяти для выполнения команды", после чего наглухо залипает процесс. Бог с ним с быстродействием, как обработать исключение, чтобы вернуться в рабочий режим? и какой ему не хватает памяти?
  7. Здравствуйте! Обнаружил проблему (баг) в компоненте StyleBook. Точнее проблемы две: Баг №1: StyleBook не уживается с переменной ReportMemoryLeaksOnShutdown. Я использую эту переменную для того, чтобы отображать сообщения об утечках памяти при закрытии программы. Так вот, если эту переменную установить в True, то при закрытии программы возникает "Access violation...". Проблема возникает в модуле FMX.Platform.Win (см. прик. файл №1) Для воспроизведения проблемы достаточно: 1. Создать новый проект 2. Закинуть на форму компонент StyleBook. Указать в свойстве FileName путь к файлу стиля (*.style) 3. В проекте после Application.Initialize; вставить строку ReportMemoryLeaksOnShutdown := True; 4. Запустите выполнение программы и закройте её. Тут и возникнет "Access violation...". Примечание: проблема возникает только если свойство FileName заполнено. Баг №2: В StуleBook обнаружена утечка памяти (см. прик. файл №2) Для воспроизведения проблемы достаточно: 1. Создать новый проект 2. Закинуть на форму компонент StyleBook. Указать в свойстве FileName путь к файлу стиля (*.style) 3. Очистить свойство FileName 4. В проекте после Application.Initialize; вставить строку ReportMemoryLeaksOnShutdown := True; 5. Запустите выполнение программы и закройте её. Тут и возникнет сообщение об утечке памяти. Примечание: проблема возникает если единожды указать путь к файлу стиля и сохраняется даже после очистки свойства FileName. P.S. Эти проблемы как-то исправляются? Если нет, то сообщите, плз, разработчикам о этих багах.
  8. Клик по итему Как уже предыдущие пользователи правильно заметили, нажатие на итем в списке самый интуитивно понятный способ на мобильных платформах. По скольку это полностью совпадает с правилами построения пользовательского интерфейса на мобильных платформах. Не надо придумывать свои способы, когда уже есть стандартные. Этим вы только запутаете пользователя, привыкшего к общему принципу работы с любым приложением. Если вам такой способ нужен, то лучше перепроектируйте ваш интерфейс, чтобы этого избежать (смотрите пункт 1.) Открытие нового вида На счет этого, если вы делаете приложение под андроид, то я бы не рекомендовал для этих целей использовать TTabControl. По одной самой главной причине: Потребление дополнительных ресурсов. Заставляет форму создавать все контролы на всех вкладках, даже на тех, что не видны. Легко представить типичную ситуацию, когда ваше приложение довольно большое и содержит большое число форм ввода и редактирования данных. Теперь представьте, что все эти контролы создаются при запуске приложения и живут все время существования приложения. Это совсем не маленькие размеры памяти, особенно на Андроиде. Ресурсы мобильной платформа не равны ресурсам настольных платформ. И если на настольной системе вы можете особо не заморачиваться о размере потребляемой памяти, так как ее много. То на мобильнике это может привести к нехватке памяти и как следствие разрушение вашего приложения. Главная идея - это иметь в каждый момент времени только то, что нужно. Поэтому я бы лучше рассматривал либо создание отдельной формы, либо создание в рантайме специального слоя (вида), которые будет загружен по верх всего, а потом будет разрушен после окончания выполнения редактирования. Так же советую использовать фреймы для таких функционально законченных блоков (редакторы сущности): Позволяет быстро и удобно создавать в нужное время на мобильной платформе требуемый вид. Забирая от системы ресурсы только в тот момент, когда они действительно необходимы. Повторное использование в других местах приложения.
  9. Правильно. Если это технические файлы, то там им и место, ну максимум в папку приложения, на сд карту вынести. Мусорить на устройстве пользователя не хорошо! Если это например фотографии из галереи, то им в галерее место. А так можете попробовать писать в общие папки. Если вы смотрели ссылки которые я вам кидал, то скорее всего заметили, что для общих папок в названии метода указано слово "Shared". К сожалению, не помню, есть ли какие-то нюансы по записи в такие папки начиная с Android KitKat. В этой версии ввели жёсткие ограничения, чтобы приложения не мусорили + это дополнительная защита. Я писал про это тут Android 4.4 и запись на внешнюю карту памяти... (уже не важно, ниже дал ссылку на справку) Попробуйте, поэкспериментируйте с путями... p.s. Если уж совсем невмоготу, то попробуйте создать папку для приложения во внутренней памяти и там хранить все доп. файлы Дополнение. Вот справка на русском Сохранение файлов, собственно, там написано всё тоже самое.
  10. Каждому - своё. Не хотите изучать новые фишки - пишите по-старинке. Насчет времени и выделения/освобождения памяти тоже много статей видел. Короче - пользоваться этим или нет - выбор разработчика.
  11. Ура! Проблема решилась.. т.е. стало работать не рестартуя после свертывания и т.д. все дело в "галочке" Это я поставил эту отметку в новом телефоне, после включения режима разработчика.. очень мне не понравились слова про сохранения моих действий и все "простые" приложения, не сохраняющие свое состояние , после рестарта оказывались в начальном положении. Отключил.. и все стало работать, приложение живет, благо памяти хватает, на сеанс просмотра инфы - 10-15 мин явно хватит и при запуске вьеверов и мейла.. ну уж если вытеснит его из памяти, значит пользователь чем то таким уж занялся посторонним, что после этого и перелогиниться, думаю, его не удивит..
  12. Для осуществления вызова какого-то кода по расписанию, даже, если приложение выгружено из памяти в Андроиде есть специальный механизм. Он называется AlarmManager. Суть его проста. Вы задаете в какое время или как часто нужно послать отложенное намерение (PendingIntent) получателю. Система приняв ваш запрос, складывает его в системную очередь. Когда наступает время отправки вашего намерения с данными, система: Если приложения нет в памяти, запускает его и передает ему интент. Если приложение в памяти, передает ему интент. Этот менеджер работает совместно с механизмом широковещательной рассылки BroadcastReceiver. Так же он не требует создания отдельного сервиса. И на мой взгляд является хорошей альтернативой. P.S. Этот механизм успешно работает и в FireMonkey для реализации отложенных уведомлений. Которых как известно в андроиде нету.
  13. Вы не поверите, но передавать экземпляры классов между различными независимыми модулями (будь то exe и dll или две разных длл) нельзя даже если версии IDE абсолютно идентичны. Потому что TBitmap в одном модуле - это не то же самое, что TBitmap в другом модуле. У каждого модуля СВОЙ менеджер памяти, своя таблица виртуальных методов (VMT), свои структуры описания классов и т.д. и т.п. Модуль будет пытаться работать с экземпляром класса, как со своим, обращаясь к своим методам вместо методов, реализация которых находится в другом модуле. И память при работе с методами и свойствами объекта он будет выделять и пытаться освободить СВОЮ, а надо было бы - память, выделенную менеджером памяти другого модуля. Вот вам и первопричина для глюков. Из dll в exe и наоборот в случае с битмапом вы можете передать максимум hbitmap, поскольку это хендл на ресурс ОС. А классы, их экземпляры, строки и другие типы с управляемым временем жизни передавать нельзя, это табу. Для изучения: http://www.gunsmoker.ru/2011/12/delphi.html#n5 сразу можно переходить к правилу 6
  14. Я же писал, что приложение, рано или поздно будет убито. Для длительных операций только сервис! Есть несколько известных мне вариантов, заставить приложение (без сервиса) дольше висеть в памяти: 1) Приложение на переднем плане с отключением блокировки экрана (сна устройства) (Так пишут игры) 2) Вывести постоянный нотификейшен на устройстве, пока он весит, приоритет у приложения повышен По поводу ловли событий "бекона" в фоне или вообще не запущенном приложении. Попробуйте разобраться, как такое реализовано в библиотеке Android Beacon Library. Ап. Судя по всему, всё завязано на BroadcastReceiver и сервисах: <receiver android:name="org.altbeacon.beacon.startup.StartupBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/> </intent-filter> </receiver> Зажимая кнопку, вы видите список последних запущенных приложений. Т.е. какие-то приложения могут работать и в фоне, в момент просмотра списка, а другие уже будут выгружены из памяти.
  15. По порядку: 1. Сервис поможет работать с датчиками, не запуская приложение, если это нужно делать скрыто без участия пользователя. Даже, если приложение выгружено из памяти, сервис обработает нужные сообщения с датчиков и сети (если нужно PUSH с сервера получить). Ну это все выше обсудили вроде. 2. Другой вариант, прописать в Manifest BroadCastReceiver, слушать события типа (TJBluetoothDevice.JavaClass.ACTION_FOUND or TJBluetoothAdapter.JavaClass.ACTION_SCAN_MODE_CHANGED, могу ошибаться с BLE не работал). Приложение само будет запускаться (не открываться основная активити, а запускаться в памяти), когда система будет отлавливать эти события и передавать приложению. Вот только не уверен, что система их будет ловить, если датчик BLE ни какое приложение не будоражит, и он уснет. Я бы делал первый пункт и второй вместе. 3. Программно включать и выключать BlueTooth не есть хороший тон с точки зрения безопасности, если Гугл это еще не закрыли, то наверное закроют через время. Но в целом, это этическая сторона, а как это делается технически, можно посмотреть здесь. 4. Если у вас есть модуль «Embarcadero\Studio\18.0\source\rtl\net\System.Bluetooth», то в нем есть все, что нужно для работы с BLE. Осталось разобраться, как обрабатывать сообщения на ваших устройствах iOS или Android, как сделать так, чтобы датчики не спали и читали входящие и т.п. 5. В Tools→Getit PM есть компоненты Beacon Fence (BeaconZonesFencing, BeaconMapFencing). Кто-нибудь их смотрел? Судя по описанию, они решают задачу собственно технологии Beacon Fence. Очень интересно узнать, что в итоге получится у Kitty или кого-то еще из этого коллективного обсуждения.
  16. Здравствуйте ZuBy! Спасибо за то что решились помочь мне! Дело в том, что я не могу отказаться от использование эффекта Я решил описать проблему более детально: Допустим есть форма, на неё бросаем Image. К Image применяем эффект BlurEffect. В процессе работы программы в Image загружаются разные картинки. Проблема состоит в том, что на устройстве под управлением ОС Android, программа потребляет всё больше и больше оперативной памяти. После чего программа вылетает. Вот я собрал тестовый проект, чтобы вы могли сами протестировать и воспроизвести данную проблему утечки памяти #include <fmx.h> #pragma hdrstop #include "Unit1.h" // --------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.fmx" TForm1 *Form1; // --------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } // --------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { if (switchOn) { switchOn = false; Image3->Bitmap = Image1->Bitmap; Image4->Bitmap = Image1->Bitmap; } else { switchOn = true; Image3->Bitmap = Image2->Bitmap; Image4->Bitmap = Image2->Bitmap; } } // --------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if (Timer1->Enabled) { Timer1->Enabled = false; } else { Timer1->Enabled = true; } } // --------------------------------------------------------------------------- Буду благодарен за любую помощь! APK_File_Effect.zip Effect.zip
  17. проект большой. проблем с компиляцией нет. но тормозит именно IDE Berlin (при этом свободной памяти 1Гиг, при том у меня SSD-диск). Seattle все шустро. Склоняюсь к версии, что именно этот официальный образ такой. Seattle в памяти 400Мб, Berlin 980Мб. CPU в моменты залипух вообще 0. По логу Process Monitor явно бурное обращение к реестру и обломы по доступу во всякие системные разделы - не понятно на каких правах туда лезет. (PS Антивирусами Nod32 с последними базами все проверял - чисто.)
  18. Спасибо за отзыв! Да, проект один и тот же. Разбирал apk файл, там нет "предыдущих" картинок. Проблему нашел. Так ведет себя телефон Lenovo A7010 (Android 6.0). Для проекта с одним и тем же именем он запоминает первые настройки (с которыми первый раз приложение запустилось) и их все время показывает. Да, наверное, какой-то кэш. Удаление и переустановка приложения, чистка памяти не помогает. Только перезагрузка устройства обновляет эти настройки. На другом, еще более стареньком LG такой фишки нет.
  19. Я это уже читал.Но я хотел именно в корень внутренней памяти свою папку(как например yandex карты делают). В этой http://delphifmandroid.blogspot.com/2014/02/blog-post_16.html статье, в комментариях Павел Алхимов пишет как он это делает, но я не пойму как этим воспользоваться.
  20. Всем добрый день. Как в сделать развертывание файлов(например ini или картинки) по адресу: /storage/emulated/0/MyFolder/123.ini или 123.jpg (т.е. корень внутренней памяти/моя папка/мой файл) пробовал в deployment указать такой путь, но файл не появился. и как мне потом с ним работать?какой путь к нему указывать? например так image1.Bitmap.LoadFromFile(system.iOUtils.TPath.Combine (system.iOUtils.TPath.??????????,'MyFolder/123.jpg')); Или как-то иначе? Может нужно вообще как-то по другому все это делать? Заранее благодарен.
  21. Причин несколько: Ява сама не может отобразить большие изображения так же. Но там причина ограничение по потребляемой памяти. Поэтому если открыть документацию, то можно увидеть специальные методы и рекомендации для сжатия размера для отображения на экран. Вместо того, что выводить картинку в 10 МгП на экран, апи выдает картинку 64 на 64 или тд. В FireMonkey есть два типа для работы с изображениями. TBitmap - построен на использовании текстур. Отсюда и идет ограничение на размер в зависимости от аппаратной части девайса. TBitmapSurface - не зависит ни от чего, кроме, как от памяти. Этот тип полностью совместим с TBitmap - это значит, что можно копировать изображения друг в друга. Это тип создан для хранения, как раз больших изображений.
  22. Прошу прощения за некропост, но информации по решению данной задачи как бы нет. Я уверен, что прокопал не весь интернет, однако же... Если у кого есть правильный ответ, выложите, его пожалуйста. На данный момент опробованы такие способы: 1. На основе заметки Получаем список доступных устройств хранения информации . Есть список, но там никак не понять какой из вариантов это карта. Например, на планшете Prestigio multipad 4 (4.2.2), sdcard1 - это карта, а sdcard0 - память устройства, но на телефоне Micromax Q338 (5.1) - наоборот: sdcard0 - это карта, а sdcard1 - память устройства. 2. На основе заметки Android 4.4 и запись на внешнюю карту памяти... . На планшете - оба пути - эмулейтед, на телефоне - вообще ничего не возвращает. Всякие файловые просмотрщики вполне отлично отличают внутреннюю память, от памяти телефона. Посему, хочу попытаться поднять этот вопрос снова - подскажите, пожалуйста, как определить путь к корню SD-Card? Ссылки, предоставленные здесь не отвечают, к сожалению, на этот поставленный ранее вопрос.
  23. Имею в своем проекте огромный невидимый TImage, из которого при необходимости вырезаются те или иные кусочки и показываются пользователям. Так оказалось сделать удобнее, чем хранить эти кусочки в БД. Изображение монохромное, из черных и белых пикселей, цвета не нужны. Я полагал, что достаточно загрузить в TImage.MultiResBitmap монохромный файл, чтобы битмэп и трактовался программой как монохромный. Но сейчас проверил это функцией PixelFormatToString - и увидел, что пиксельный формат имеет значение BGRA. Похоже, под цвета по-прежнему выделяются ресурсы, которые можно было бы сэкономить. Возникают следующие вопросы: 1. Действительно ли PixelFormat=BGRA означает, что мой TBitmap не является монохромным и занимает в памяти в разы больше места? 2. Если да, то есть ли способ сделать его монохромным?
  24. Ну это вопросы к разработчикам системы, почему они решили что то, что пользователь закрыл, должно из памяти выгружаться системой (да, оно висит в recent, но на деле может быть выгружено - это вы видите, когда запускаете снова от туда, и все данные и состояние теряется.) JNI тут не причем. Почитайте первоисточник (доки по андроиду от гугла, про жц активити. Оно одно, обычно, для всего приложения на делфи) Ну и попробуйте "закрыть" тот же навигатор гугла. Что будет? - поделитесь результатом
  25. Здравствуйте. Вопрос такой, как выгрузить приложение из памяти? При вызове Close приложение просто сворачивается и при нажатии на кнопку отображения приложений каскадно оно по прежнему видно и к нему можно вернуться. MainActivity.finish; не помогает. Приложение не выгружается. Halt(0) сворачивает приложение несколько по иному, но оно всё равно остаётся в процессах висеть. При чём, когда его вызываешь, происходит его перезапуск. Очищаются се данные. которым оно обладало после работы. Так же не понятно, как убрать при старте временно появляющиеся изображение этого самого огонька (факела). Я указал свои изображения во всех разрешениях (Launcher Icon) и (Splash Image) в виде PNG необходимого разрешения и эти изображения легли в финальный APK, как и положено, и в программах моя программа имеет правильную и конку, но при старте проскакивает этот факел и потом приложение запускается. Отключение галки Include Splash Image ничего не меняет. Работаю в RAD XE8 Delphi. Проверяю на адндроид устройстве с версией ОС 7. Кто со всем этим сталкивался и как поборол?
×
×
  • Создать...