• 0
BMW006

TMapView завешивает программу

Вопросы

Помогите, замучился уже. Решения так и не нашел.

Суть такова.

На форме стоит всего один TMapView мы создаем маркер и меняем его позицию (удаляем маркер, создаем новый) создавая видимость перемещения маркера по карте. Так вот если мы в момент установки маркера переключимся на другую задачу и снова вернемся в приложение, оно намертво зависает. Отключаем выставление маркеров и все работает. Что я только не делал. Запрещал выставлять маркеры когда : TApplicationEvent.EnteredBackground , TApplicationEvent.WillBecomeInactive  при FormSaveState, ставил процедуру в поток и так. Ничего не вышло.

Процедура создания маркера простая.

 

Цитата

procedure THeaderFooterForm.SetMarker;
begin

 TThread.Synchronize(nil, procedure
  begin

    try


       If Assigned(MarkerMap) Then MarkerMap.DisposeOf;

        MapLocation:=TMapCoordinate.Create(Lat,Long);

        MapView1.Location:=MapLocation;

        MarkerMapDescr:=TMapMarkerDescriptor.Create(MapLocation);
        MarkerMapDescr.Icon := Image1.Bitmap;
        MarkerMapDescr.Draggable:=True;

        MarkerMapDescr.Title:='TEST';
        MarkerMapDescr.Snippet:='TEST';

        MarkerMap:=MapView1.AddMarker(MarkerMapDescr);

    except
    end;

 End);

end;

 

То есть например если запрашивать SetMarker по циклу с изменением координат, а потом переключиться на иную задачу и вернуться, все будет висеть намертво. Почему так и как избавится. Помогите нет уже сил.

P.S.:

XE 10.1 (Проверял на двух независимых ПК)

Изменено пользователем BMW006

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 ответов на этот вопрос

  • 0

Отключите создание маркеров при переключении на другую задачу...

При возвращении... продолжайте выставлять!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, wamaco сказал:

Отключите создание маркеров при переключении на другую задачу...

При возвращении... продолжайте выставлять!

Делал так, описал выше.

 

Цитата

Запрещал выставлять маркеры когда : TApplicationEvent.EnteredBackground , TApplicationEvent.WillBecomeInactive  при FormSaveState

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

Все свои варианты исчерпал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Добрый день. Та же проблема. Бьюсь уже 3 дня. Уже думаю уходить на Android Studio (: Смогли решить? Или может кто-то подскажет...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
18 часов назад, Yuriy2606 сказал:

Добрый день. Та же проблема. Бьюсь уже 3 дня. Уже думаю уходить на Android Studio 🙂 Смогли решить? Или может кто-то подскажет...

Сходите на Android Studio! После мытарств там, ждем обратно! 😂

По-делу.... что конкретно не получается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 18.11.2018 в 00:33, Yuriy2606 сказал:

Добрый день. Та же проблема. Бьюсь уже 3 дня. Уже думаю уходить на Android Studio 🙂 Смогли решить? Или может кто-то подскажет...

Попробуйте обернуть в поток с синхронизацией

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Здравствуйте коллеги. Приятно, что есть люди, готовые помочь :)

Проблема следующая: Программа содержит карту MapView на которую наносятся маркеры в динамике (раз в 10 сек передвигаются машинки по карте). Все нормально работает пока я не перейду к другой активности. После возобновления моей активности, с вероятностью 50\50, приложение не отображается, просто черный экран, иногда на черном экране появляются кнопки Google карты. Помогает снятие процесса приложения и запуск его заново. Проверено на двух девайсах. Методом логирования я вычислил, что приложение падает тут:

  begin
    try
    mapPolygon.DisposeOf; //тут исключение
    except
    end;
    SetLength(Outline,5);
    Outline[0]:=TMapCoordinate.Create(VLLat, VLLon);
    Outline[1]:=TMapCoordinate.Create(VLLat, NPLon);
    Outline[2]:=TMapCoordinate.Create(NPLat, NPLon);
    Outline[3]:=TMapCoordinate.Create(NPLat, VLLon);
    Outline[4]:=TMapCoordinate.Create(VLLat, VLLon);
    Plg:=TMapPolygonDescriptor.Create(Outline);
    Outline:=nil;
    Plg.StrokeColor := TAlphaColorRec.Slateblue;
    Plg.StrokeWidth := 3;
    Plg.Geodesic := True;
    Plg.ZIndex := 0.9;
    //Plg.FillColor := TAlphaColorRec.Yellow;
    try
    mapPolygon := Form1.MapView1.AddPolygon(Plg); //зависает тут, и это при наличии try except
    except
    end;
  end;

Ставил перехват события сворачивания приложения и запрет на обновление карты при этом. Но это не помогло. В приложении используются потоки типа:

 TThread.CreateAnonymousThread(procedure ()
  begin

          TThread.Synchronize(nil,
          procedure
          begin
             
          end);

 
  end).Start;

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

И еще, вычислил только что: в приложении используется LocationSensor1.Sensor и для отладки я использую FakeGPS. Почему-то LocationSensor1.Sensor в большинстве случаев выдает правильные координаты из FakeGPS, а иногда те, которые он получает по wifi/gsm. При этом на улице, с отключеным Fake GPS, наблюдается то же самое, но реже. Это странно. При этом синяя точка на карте отображается в правильном месте.

Может кто-то сталкивался? Заранее спасибо за ответы. :)

10.1 Berlin

Изменено пользователем Yuriy2606

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Здравствуйте коллеги.

Проблему с зависанием приложения решил при помощи отслеживания Hide приложения и MapView1.Visible:=false;

Соответственно при возобновлении активности делаю MapView1.Visible:=true; Зависания почти пропали на 90%.

Прыгающий GPS я победил отключением WiFi/GSM локации. Оставил только GPS. Как-то это костыльно, масса пользователей

до этого не догадаются и на карте будет куча прыгающих машин.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу