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

Зависает при старте


x11

Вопрос

Приложение + служба.

В службе установлен флаг перезапуска в StrartCommand^

result := TJService.JavaClass.START_STICKY; // rerun service if host app stops

 

Проблема вот в чем. На экране главная форма хост-приложения.  На смартфоне внизу нажимаю кнопку Назад. Приложение закрывается.

Вижу в LogCat Андроида, что аварийно завершается служба. Андроид восстанавливает работу службы и запускает и службу и само приложение. Хотя Андроид не должен перезапускать host-приложение, а только службу.
 

Цитата

 

ActivityManager: Scheduling restart of crashed service "имя.моего.пакета/com.embarcadero.services.Служба" in 1000ms

ActivityManager: Start proc "имя.моего.пакета" for activity "имя.моего.пакета/com.embarcadero.firemonkey.FMXNativeActivity: pid=21460 uid=10315 gids={50315, 9997, 3003, 1028, 1015} abi=armeabi-v7a

 

 

Т.е. вижу, что поле выхода приложение со службой работают.

Когда с рабочего стала ланчера запсукаю host-приложение, то оно виснет при старте и даже событие OnCreate главной формы не срабатывает. Показывается стартовое окно (splash) и висит, пока Андроид не предложит закрыть или подождать. И так несколько раз приходится делать, пока приложение не запустится.

Я в OnClose главной формы разные параметры прописывал для action, но толку нет.

Хоть какой-нибудь костыль посоветуйте, пожалуйста.

 

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

Может можно как-то при закрытии приложения не закрывать его, а сворачивать?

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

Заранее благодарен.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы
procedure CloseApp;
begin
{$IFDEF ANDROID}
  TAndroidHelper.Activity.moveTaskToBack(true);
  // MainActivity.finish;
{$ELSE}
  Application.Terminate
  // Application.MainForm.Close;
{$ENDIF}
end;

 

 

procedure TFormMain.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
  inherited;
  if Key in [vkEscape, vkHardwareBack] then
  begin
    CloseApp;
    Key := 0;
  end;
end;
Ссылка на комментарий
  • 0

Спасибо. Работает.

Но это спасает, только если приложение штатно закрываешь.

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

Т.е. нужно как-то решать проблему на старте.

Это очень неудобно, когда приложение безо всяких сообщений закрывается.

Ссылка на комментарий
  • 0
  • Модераторы
1 час назад, x11 сказал:

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

 ну значит нужно писать чтобы не было исключении)

Ссылка на комментарий
  • 0

Когда я, в самом начале изучения, смотрел примеры и видео по службе с host-приложением, которые реализованы в FMX, то там было видно, что при закрытии приложения, оно автоматически не стартует, а просто служба сама продолжает работу. Т.е. приложение можно запускать и завершать отдельно, при этом служба продолжает работу. А тут получается так, что при аварийном или принудительном завершении host-приложения Андроид автоматически запускает это host-приложение.

Ссылка на комментарий
  • 0

Наверное, я сам виноват в проблемах с перезапуском host-приложения.

Доигрался...

Пытался добавить в проект службы доп. файлы и получилось так, что в dpr-проект host-приложения добавил в USES несколько файлов из проекта службы. Получилась путаница.

Удалил некорректные ссылки в USES host-приложения. Пока полёт перезапуск нормальный.

Ссылка на комментарий
  • 0
В 18.02.2018 в 14:06, x11 сказал:

Пока полёт перезапуск нормальный.

 

Я ошибался.

Если вываливается исключение и приложение падает, то потом всё равно при запуске виснет :(

Ссылка на комментарий
  • 0
В 16.02.2018 в 10:46, Равиль Зарипов (ZuBy) сказал:

 ну значит нужно писать чтобы не было исключении)

А разве ОСь не завершает приложения по своему желанию, оставляя только скрин последнего состояния в диспетчере?  Вроде делает именно так

 

В 13.02.2018 в 23:09, x11 сказал:

Когда с рабочего стала ланчера запсукаю host-приложение, то оно виснет при старте и даже событие OnCreate главной формы не срабатывает. Показывается стартовое окно (splash) и висит, пока Андроид не предложит закрыть или подождать. И так несколько раз приходится делать, пока приложение не запустится.

У нас такая же беда. Грешили на Эмбу. Написали сервис на Яве. Пару дней было норм. Уже поверили в чудо - но нет. Все так же...  Ищем решение

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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