2015-05-13 1 views
0

У меня есть карта Google (MapFragment) с более чем 5 маркерами. Я хочу обновить положение маркеров на каждые 10-15 секунд. Я получаю новые координаты через вызов API.Обновление маркера Google Maps с длительным опросом без блокировки UI

Есть ли способ обновить маркеры без блокировки пользовательского интерфейса? Примеры C# фрагмента кода для длинного опроса было бы удивительным ..

Я пытался делать -

RunOnUiThread(() => 
    { 
     while(true){ 
      //UPDATE MARKERS HERE 
      Thread.Sleep(5000); 
     } 
    } 

но заморозить UI. Есть ли способ обновить маркеры без замораживания пользовательского интерфейса?

ответ

1

Выполнение:

RunOnUiThread(() => 
{ 
    while(true){ 
     //UPDATE MARKERS HERE 
     Thread.Sleep(5000); 
    } 
} 

силы все внутри анонимного метода для запуска в потоке пользовательского интерфейса. Таким образом, цикл while, включающий Thread.Sleep, блокирует пользовательский интерфейс.

Вместо этого вы хотите выполнить свою длительную операцию асинхронно, например, используя CPL (async/await) в C#.

Dictionary<int, Marker> _markers = new Dictionary<int, Marker>(); 

async Task PollServerAsync(CancellationToken cancellationToken) 
{ 
    while (!cancellationToken.IsCancellationRequested) 
    { 
     var coordinates = await GetNewCoordinatesFromServerAsync(cancellationToken); 

     foreach (var coord in coordinates) 
     { 
      var marker = _markers[_coord.Id]; 
      RunOnUiThread(() => 
      { 
       marker.SetPosition(coord.Position);  
      }); 
     } 

     await Task.Delay(5000, cancellationToken); 
    } 
} 
+0

как босс .. :-) –

Смежные вопросы