Einzelnen Beitrag anzeigen

mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#8

AW: PermissionsService.RequestPermissions ist asynchron!

  Alt 3. Jan 2020, 14:40
..."Das procedure(const APermissions: TArray<string>; Callback wird gar nicht mehr aufgerufen wenn bereits alle Zugriffe erlaubt worden sind!"...
wozu rufst du es denn auf?... du hast dir doch wohl sicher alles was du einmalig abfragen kannst schon beim ersten mal in einer eigenen z.B. SQlite DB gespeichert!?

Ansonsten gilt ganz allgemein:
alles was "nur" in der Async procedure an Daten verfügbar, muss in "globale Variablen(sinnvoller Weise des MainThreads)" gefuffert und praktischer Weise mit einem TimeStamp wann zuletzt aktualisiert versehen werden.
Nur dann kannst du im Programmablauf wenn du real irgendwann die abgefagten Sachen benutzen willst feststellen, ob du mit den DB Werten oder ev. gemäß TimeStamp den aktuelleren gepufferten AsyncDaten arbeiten willst, und/oder z.B. deine DB aktualisieren.


Und aus Erfahrung gilt praktisch:
- alles was man Async auslöst kann entweder als Result stets "gültig"/"ungültig" ODER "!TimeOut!" haben... also IMMER mindestens eine "TriState-Logik" implementieren!
- daher ist mein Vorschlag mit nem langen "max" TimerTimeout VOR dem AsyncCall und nem ändern des Timers auf ein minimales TimeOut IM AsynCall eine aus meiner Sicht sehr elegante und sichere Lösung, um alle 3 möglichen "Async-ResultStates" simpel an einer Stelle im "onTimer" im HauptThreadKontext ver/bearbeiten zu können.


TIP:
Statt eines StartScreen bietet es sich an anfangs einfach an, einen halbdurchsichtigen Frame/Dialog/... über die gesamte GUI zu legen, dann alles was nötig ist StepByStep "als Async-Kette" machen und erst wenn alles OK, bzw. irgend ein TimeOut die GUI wieder freigeben(bei TimeOut nun dem Anwender mitzuteilen was fehlt und warum nun Schluss)
- wenn schon alles frei und OK, sollte die GUI-Serre nicht länger wie 1sec dauern/sichtbar sein... sonst besser nen Progressbar oder ne Animation mit anzeigen

Geändert von mensch72 ( 3. Jan 2020 um 14:45 Uhr)
  Mit Zitat antworten Zitat