Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы с крашом приложения на устройстве Xiaomi при использовании камеры

Delphi , Программа и Интерфейс , Приложение своё

 

В данной статье мы рассмотрим проблему, связанную с крашом приложения на устройствах Xiaomi при попытке использовать камеру в приложении, разработанном с использованием Delphi и FireMonkey. Мы обсудим возможные причины этой проблемы и предложим различные подходы к ее решению.

Описание проблемы

Когда вы используете TakePhotoAction из ActionList в своем приложении, оно переносится в фоновое состояние, и вперед выходит системная камера. Многие производители устройств используют этот момент для очистки памяти, что может привести к приостановке вашего приложения системой. После завершения съемки фотографии метод TPhotoActivityResponseListener.onResponse из FMX.MediaLibrary.Android вызывается, но оригинальный метод LParams.OnDidFinishTaking больше не назначен, так как приложение было приостановлено в процессе.

Порог для этого поведения зависит от настроек управления памятью производителя. По моим наблюдениям: - Устройства Samsung часто являются наиболее агрессивными, приостанавливая приложения, когда использование памяти превышает ~50МБ. - Другие производители могут начинать приостанавливать приложения при использовании памяти около ~100МБ. - Если настройки оптимизации памяти включены производителем, кажется, что ~500МБ является "твердым порогом", при котором ваше приложение приостанавливается почти всегда.

Решение

Для решения этой проблемы необходимо убедиться, что код, выполненный в событии OnTakePhotoFinish, обрабатывает только переданный в событие изображение и что все компоненты, участвующие в этом процессе, корректно доступны после перезапуска приложения. Если необходимо, сохраните текущее состояние приложения с помощью события SaveState. Это позволяет вам восстановить необходимую информацию о приложении и перейти к правильным точкам после перезапуска приложения. Подробнее о FireMonkey Save State можно прочитать в документации: FireMonkey Save State.

На первой форме, созданной после перезапуска приложения, следует подписаться на MessageManager в событии OnCreate. Вот пример кода:

type
  TStartForm = class(TForm)
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure MessageHandlerTakePhoto(const Sender: TObject; const M: TMessage);
  end;

procedure TStartForm.FormCreate(Sender: TObject);
begin
  TMessageManager.DefaultManager.SubscribeToMessage(TMessageDidFinishTakingImageFromCamera, MessageHandlerTakePhoto);
end;

procedure TStartForm.FormDestroy(Sender: TObject);
begin
  TMessageManager.DefaultManager.Unsubscribe(TMessageDidFinishTakingImageFromCamera, MessageHandlerTakePhoto);
end;

procedure TStartForm.MessageHandlerTakePhoto(const Sender: TObject; const M: TMessage);
begin
  if M is TMessageDidFinishTakingImageFromCamera then
  begin
    if Assigned(TMessageDidFinishTakingImageFromCamera(M).Value) then
    begin
      // Do something with the TMessageDidFinishTakingImageFromCamera(M).Value (TBitmap)
    end;
  end;
end;

Альтернативное решение

Если вы хотите избежать приостановки приложения, можно использовать альтернативные методы для управления процессом съемки фотографий. Например, вы можете использовать библиотеку TDBXCamera или другие сторонние библиотеки, которые предоставляют более надежные методы для работы с камерой. Эти библиотеки могут быть настроены для более эффективного использования памяти и могут предотвратить приостановку приложения.

Пример использования библиотеки TDBXCamera:

uses
  DBXCamera;

procedure TPhotoForm.TakePicture(Sender: TObject);
begin
  if TOSVersion.Check(11) then
  begin
    DBXCamera.TakePhoto;
  end;
end;

Заключение

Проблема с крашом приложения на устройствах Xiaomi при использовании камеры может быть связана с настройками управления памятью производителя. Для решения этой проблемы важно корректно обрабатывать состояние приложения после перезапуска и использовать надежные методы для работы с камерой. Следуя предложенным решениям, вы сможете улучшить стабильность и надежность вашего приложения на устройствах Xiaomi и других устройствах с аналогичными настройками управления памятью.

Создано по материалам из источника по ссылке.

Контекст статьи — проблема краха приложения на устройствах Xiaomi при использовании камеры и предложения по её решению, включая управление состоянием приложения и использование альтернативных библиотек.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Приложение своё ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-22 18:10:28/0.0035419464111328/0