Nach probearbeiten absagen Muster

    Beispielsweise werden Filteransichten häufig versehentlich geschlossen, und diese Aktion führt dazu, dass Benutzer ihre Arbeit verlieren. Dieses Problem ist besonders auf mobilen Schnittstellen weit verbreitet, da Filterbildschirme oft die Mehrheit – wenn nicht den gesamten – des verfügbaren Bildschirmbereichs verbrauchen, was es schwierig oder unmöglich macht, zu erkennen, ob bereits Eine Auswahl angewendet wurde. Um die Vorteile der strukturierten Parallelität zu nutzen und sicherzustellen, dass wir keine unnötige Arbeit leisten, müssen Sie sicherstellen, dass Sie Ihren Code auch stornierbar machen. Sie verwenden eine Verzögerte, wenn Sie an dem Ergebnis der Coroutine interessiert sind. Dieses Ergebnis wird von Deferred.await zurückgegeben, wenn die Coroutine abgeschlossen ist. Verzögert ist eine Art von Auftrag, und er kann auch abgebrochen werden. Erfahren Sie mehr über Muster für die Arbeit, die nicht von diesem Beitrag gelöscht werden sollten: Wenn Sie die androidx KTX-Bibliotheken in den meisten Fällen verwenden, erstellen Sie keine eigenen Bereiche und sind daher nicht dafür verantwortlich, sie zu stornieren. Wenn Sie im Rahmen eines ViewModel arbeiten, verwenden Sie viewModelScope oder, wenn Sie Coroutinen starten möchten, die an einen Lebenszyklusbereich gebunden sind, verwenden Sie das lifecycleScope. Sowohl viewModelScope als auch lifecycleScope sind CoroutineScope-Objekte, die zum richtigen Zeitpunkt abgebrochen werden. Wenn beispielsweise das ViewModel gelöscht wird, werden die in seinem Gültigkeitsbereich gestarteten Coroutinen abgebrochen. Ich habe es damals nicht erkannt, aber ich war Einem dunklen Muster UX zum Opfer gefallen – was DarkPatterns.org ein “Roach Motel” nennt und auch ein Beispiel für “zwangsweise Kontinuität” ist (wir werden weiter unten näher darauf eingehen). Tatsächlich begegnen die meisten von uns regelmäßig dunklen Mustern in UX und erkennen es möglicherweise nicht. Beim Starten mehrerer Coroutinen kann es ein Schmerz sein, sie im Auge zu behalten oder jede einzeln abzubrechen.

    Vielmehr können wir uns darauf verlassen, dass der gesamte Scope-Coroutinegestartet aufgehoben wird, da dies alle erstellten untergeordneten Coroutinen abbricht: Die Coroutine-Arbeit hört nicht nur auf, wenn die Absagen-Arbeit aufgerufen wird. Stattdessen müssen wir unseren Code ändern und überprüfen, ob die Coroutine regelmäßig aktiv ist. Die obigen Beispiele scheinen Probleme zu haben, wenn die asynchrone Methode mehrmals schnell nacheinander aufgerufen wird, z. B. viermal. Dann brechen alle nachfolgenden Aufrufe dieser Methode den ersten Task ab und am Ende werden drei neue Tasks generiert, die gleichzeitig ausgeführt werden. Also kam ich auf die Idee: Unter der Haube benachrichtigt der Kinderjob seine Eltern über die Kündigung über die Ausnahme. Das übergeordnete Element verwendet die Ursache des Abbruchs, um zu bestimmen, ob es die Ausnahme behandeln muss. Wenn das Kind aufgrund von CancellationException abgebrochen wurde, ist keine andere Aktion für das übergeordnete Element erforderlich. Wenn der Angerufene nun noch aussteht und der Aufrufer beschließt, den Vorgang abzubrechen, löst er eine Art Signal aus, das sich an den Angerufenen weitergibt (und möglicherweise an alle tiefen Operationen, die vom Angerufenen selbst aufgerufen werden). Alle tief ausstehenden Vorgänge werden abgebrochen.

    Die neuesten Artikel über Interface Usability, Website Design und UX Research der Nielsen Norman Group.