UWP: Vanaf Background task naar Foreground data

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • diondokter
  • Registratie: Augustus 2011
  • Laatst online: 10-10 23:31

diondokter

Dum spiro, spero

Topicstarter
Hallo beste tweakers!

Ik ben bezig met een app in Xamarin C# en nu specifiek met gps in de background op UWP.
Het is de bedoeling dat de route van de gebruiker bijgehouden wordt, ook als de app suspended is.
Dit werkt op zich al aardig, maar ik kwam er achter dat ik niet bij de data van de app kan. Dit komt omdat de background task op een apart proces draait.

Mijn vraag:
Hoe kan ik vanuit mijn background task mijn gewone data veranderen/updaten?

Het liefst zou ik iets als dit willen:
C#:
1
2
3
4
//In de background
Geoposition Position = await Geo.GetGeopositionAsync();

LocationTracker.PositionChangedCallBack(Position); // De callback is assigned in de foreground, maar is null in de background.


Ik kan wel oplossingen bedenken om dit probleem te omzeilen, maar dat zijn allemaal passieve methodes.
De UI wordt de hele tijd geüpdate met die data. Als ik bijvoorbeeld een bestand ga maken om het tijdelijk in op te slaan, dan moet ik in de foreground de hele tijd gaan zitten scannen op nieuwe data.

Ook andere oplossingen, zoals het gebruik van een socket, is niet handig omdat de foreground hiervoor actief moet zijn.

Ik hoop dat iemand me in de juiste richting kan sturen om dit op te lossen.
Dion Dokter
...

[ Voor 0% gewijzigd door diondokter op 01-08-2016 13:03 . Reden: typo ]

Beste antwoord (via diondokter op 02-08-2016 14:28)


  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
Nu ben ik geen Xamarin held, maar gebruik je niet gewoon mvvm? Maw bereik je niet wat je wilt door een viewmodel property te zetten op het moment dat je een update van je data wil doorvoeren? Vervolgens een NotifyPropertyChanged event raisen zodat de frontend geupdate word? Als de background thread alleen schrijft en de front end alleen de value uitleest kan je thread sync redelijk eenvoudig zijn. En je thread kan evt vrolijk doordraaien zonder dat de frontend actief is?

[ Voor 12% gewijzigd door Laurens-R op 02-08-2016 13:21 ]

Alle reacties


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
Nu ben ik geen Xamarin held, maar gebruik je niet gewoon mvvm? Maw bereik je niet wat je wilt door een viewmodel property te zetten op het moment dat je een update van je data wil doorvoeren? Vervolgens een NotifyPropertyChanged event raisen zodat de frontend geupdate word? Als de background thread alleen schrijft en de front end alleen de value uitleest kan je thread sync redelijk eenvoudig zijn. En je thread kan evt vrolijk doordraaien zonder dat de frontend actief is?

[ Voor 12% gewijzigd door Laurens-R op 02-08-2016 13:21 ]


Acties:
  • 0 Henk 'm!

  • diondokter
  • Registratie: Augustus 2011
  • Laatst online: 10-10 23:31

diondokter

Dum spiro, spero

Topicstarter
Ik heb het nu werkende, op een vergelijkbare manier die jij voorstelt.

In de background task heb je een property genaamt 'progress'.
Deze is eigenlijk bedoelt om in de foreground een progressbar te updaten.
Elke keer dat de progress geüpdate wordt, wordt er in de foreground (wanneer die actief is) een event geraised (ook genaamd 'Progress').
Dus wat ik nu doe in de background is de verzamelde data serializeren, die in de LocalSettings zetten en Progress 1-uppen.
In de Foreground deserialize ik al die data (weer terug naar hetzelfde format), raise ik mijn eigen event en verwijder ik de data in de LocalSettings.

Alles behalve optimaal, maar het werkt.
Wat dat betreft werkt Android toch wel wat beter met zijn services.

Maar goed, bedankt voor je hulp!


[Edit 03-08-16]
Na nog wat meer rondzoeken naar een betere manier, vond ik de ExtendedExecutionSession klasse.
Hiermee kan je aan het OS doorgeven dat de app niet suspended wil worden en het OS zal dit ook zoveel mogelijk respecteren.
Door dit te gebruiken hoef je geen background task te starten en kun je nog gewoon bij alle data.
http://www.sharpgis.net/p...ws-10s-Extended-Execution
:)

[ Voor 21% gewijzigd door diondokter op 03-08-2016 13:32 ]