2016-10-26 2 views
1

In meiner App habe ich ein nerviges Verhalten. Es verursacht meinen Kunden Probleme.Modal Dialog erscheint nicht

Die App hat mehrere Punkte, wo ich einen Dialog (Modal) zeigen muss, dann können die Benutzer einige Felder ausfüllen und dann können sie den Dialog schließen. Das System folgt also seinem natürlichen Weg.

In bestimmten Momenten funktioniert das gut. Der Dialog wird angezeigt, der Benutzer interagiert mit ihm, schließt ihn, ...

Aber in anderen Momenten (der gleiche Code) erscheint der Dialog nicht automatisch. Der Benutzer muss einige externe Aktionen auf dem Gerät ausführen (z. B. die Ausrichtung ändern, in der Mitte des Bildschirms berühren, eine Bildlaufgeste ausführen usw.). Eine Aktion, die im Moment nicht intuitiv ist. Dieses Verhalten lässt den Benutzer glauben, dass meine App eingefroren ist. Für mich ist klar, dass der Dialog aufgerufen wurde, einfach wurde nicht auf dem Bildschirm gezeichnet.

Ich habe versucht, über dieses Problem zu lesen. Ich habe einige Untersuchungen in ähnlichen Fragen ohne Erfolg. Ich denke, die Ursache ist mit EDT verbunden.

Kurz gesagt, wie kann ich ein Dialog Modal aufrufen, ohne EDT-Regeln zu brechen. Und genauer gesagt, wie kann ich dieses Problem lösen. Wenn ich anfrage, dass ein Dialog auf dem Bildschirm angezeigt wird, möchte ich, dass er wirklich in 100% der Fälle angezeigt wird. Heute funktioniert zufällig.

Zusätzliche Informationen: Meine App verwendet Java 5 noch. Empfehlen Sie die Migration nach Java 8?

======= Weitere Informationen (1) ===========

Dieses Problem ist stark von Gerätemodell abhängig. In MotoG3 (Android 6) ist dieses Problem eine Ausnahme. Selten tritt es auf. In meinem Galaxy Note 8 ist das Gegenteil. Tritt immer auf. In Lenovo Vibe5 (Android 6). Tritt häufig auf. Ich habe diese Informationen hinzugefügt. Vielleicht hilft es, das Problembild zusammenzufügen.

Zusätzliche Frage: Ist es möglich, ein Snippet zu schreiben, das ich als Vorlage verwenden kann, um Dialog Modal Anruf ohne Unterbrechung einige Regel von EDT auszuführen?

+0

Ja, migrieren Sie zu Java 8. Die letzte Version von Java 5 war vor 7 Jahren. Es wird aber ein Schmerz sein ... –

+0

Vielen Dank für Ihren Kommentar. – hrugani

Antwort

0

Schalten Sie das Tool zur Erkennung von EDT-Verletzungen im Simulator ein, das solche Probleme erkennen soll. Untersuchen Sie potenziell problematische Fälle von Dialog Aufrufen und veröffentlichen Sie sie speziell, wenn Sie nicht wissen, wie Sie sie beheben können.

Java 8 ist nicht verwandt, obwohl die Migration eines Projekts nicht trivial ist.

+0

Hallo Shai. Mit Simulator kann ich mit diesem Problem nicht umgehen. Bidirektionale Kommunikation zwischen Javascript und Java funktioniert nicht. (Ich weiß auch nicht warum. Aber das ist ein anderes Problem). Kann ich adb (von Android-sdk) verwenden und Zugriff auf EDT-Verletzungen direkt vom Logcat-Gerät bekommen? Bidirektionale Kommunikation funktioniert gut, wenn App auf physischen Geräten ausgeführt wird. Dieses Problem passiert genau in Java-Code, der von Javascript aufgerufen wird. – hrugani

+0

Java-Code, der von JavaScript aufgerufen wird, wird wahrscheinlich im nativen Browser-Thread aufgerufen. Um mit der Benutzeroberfläche zu interagieren, benötigen Sie eine CallSerial(). –

+0

Ich habe das getan. Ich habe bereits versucht, Dialog mit CallSerial() aufzurufen. Das Ergebnis war schlechter.Eine Ausnahme meldet EDT-Verstöße mit der folgenden Meldung: Ein interner Anwendungsfehler ist aufgetreten: java.lang.RunTimeException: Diese Methode darf nicht im EDT aufgerufen werden. – hrugani