2016-07-12 18 views
0

Ich verwende Sprungbrett in meiner Anwendung und haben mehrere Aufgaben fließt. Also, wann immer ich von einem Feature zu einem anderen Feature umschalte, kommt ein weißer Bildschirm flimmer Bildschirm auf Task-Flow-Wechsel zwischen Feature.This Bildschirm kommt auch in MAF Beispiele auch von oracle gegeben. Ich möchte diesen weißen Bildschirm für eine kurze Weile kommen beim ersten Laden von Task-Flow Funktion. Bitte antworten Sie mir, dass wie kann ich es erreichen.Entfernen weißen Bildschirm in Oracle MAF-Anwendungen

jdeveloper Version: 12.1.3

maf: 2.2.2

Antwort

1

Anand, wir (ich bin Mitarbeiter Oracle) erhielt vor kurzem eine ähnliche Frage internen Oracle von Oracle Support im Auftrag eines Kunden . Vermutlich war dieser Kunde Sie und Sie haben bereits eine Antwort. Lassen Sie es uns wissen.

Post bearbeiten als Reaktion auf Anand's Follow-up-Antwort.

Keine Sorge, hier sind die Details des Problems, das Sie sehen. Ich werde versuchen zu beschreiben, warum es passiert und wie Sie Ihre App möglicherweise ändern können, um dieses Problem zu reduzieren. Während die Beschreibung lang ist, ist es nicht so schwierig, diese Änderungen zu machen, es braucht nur eine Menge Worte zu erklären!

Darüber hinaus empfehle ich, dass Sie diese Änderungen nicht ohne eine volle Runde der Regressionstests dauerhaft machen. Diese Änderungen werden die Zusammensetzung Ihrer App grundlegend verändern. Daher kann ich nicht garantieren, dass dadurch Ihre Logik nicht beeinträchtigt wird. Damit Sie diese Änderungen vornehmen können und darauf vertrauen können, dass nichts kaputt geht, müssen Sie auch eine volle Runde der Regressionstests vor nehmen Sie die Änderungen vornehmen, dann vergleichen Sie es mit den Ergebnissen der Post-Change-Regressionstest, so dass Sie kann von bestehenden Problemen und neuen Problemen, die durch diese Änderungen verursacht werden, unterscheiden.

Lassen Sie uns einen Schritt zurückgehen und beschreiben, warum das Problem auftritt.

Erstens, wie Sie festgestellt haben, tritt das Problem auf, wenn die Anwendung das erste Mal geöffnet wird und wenn Sie eine Funktion zum ersten Mal mit einem zugehörigen Task-Flow öffnen. Wenn Sie ein Sprungbrett mit vielen Funktionen haben, wenn Sie zwischen den Funktionen springen und jedes zum ersten Mal startet, sehen Sie diesen weißen Blitz für jeden (nur beim ersten Mal, nicht bei jeder weiteren Wiedereröffnung). Je nach Geschwindigkeit Ihres Geräts wird auch die Navigation zu diesem Taskfluss leicht verzögert.

Zweitens wird dieses Problem auf langsameren Geräten oder im Android-Emulator ohne HAXM viel mehr bemerkbar sein, da es mit einem Leistungsengpass verbunden ist. Da MAF unter iOS schneller läuft, ist dieses Problem kaum zu erkennen, und auf modernen Android-Geräten ist es schwer zu sehen, da es zu schnell ist. Als Beispiel für mein älteres Nexus 7 Tablet mit 1,5 Ghz 2nd-Gen 2013 sehe ich den weißen Blitz, die meisten modernen Android-Handys haben einen 2Ghz + -Prozessor und ich habe dieses Problem nicht mehr bemerkt. Im Gegenzug als Entwickler werden Sie den Flash häufiger sehen, da Sie fortwährend & die App erneut vertreiben, was zu einem Neustart der App führt und der Flash beim ersten Öffnen der App & jedes Feature wieder geöffnet wird. (echte Benutzer werden dies viel seltener sehen, da sie dazu neigen, bei den meisten Apps an einigen Funktionen festzuhalten und die App im Hintergrund laufen zu lassen, so dass die Funktionen bereits initialisiert sind)

Also warum passiert der Flash, und der damit verbundene Verzögerung in der Navigation?

Wenn ein Feature zuerst aufgerufen wird, initialisiert MAF eine Reihe von Dingen im Hintergrund, einschließlich eines Classloaders pro Feature.Diese Initialisierung ist aus irgendeinem Grund teuer in Bezug auf die Leistung und kann während der Verarbeitung dazu führen, dass die Benutzeroberfläche gelöscht wird, was zu einem weißen Bildschirm führt. Ich münze diesen Effekt den "weißen Bildschirmblitz".

Sobald ein Feature initialisiert wurde, wird die Geschwindigkeit underwhich es macht, ist viel schneller und Sie sind unwahrscheinlich, dass der Blitz zu sehen, wie alles, was jetzt ist sicher initialisiert. Mit anderen Worten, das Problem ist nur zum ersten Mal bemerkbar, wenn ein Merkmal gerendert wird. Wenn Sie das Feature erneut öffnen, wird es zu schnell angezeigt, da der Classloader bereits geladen ist.

Wie wir jetzt wissen, was das Problem verursacht, was können wir tun dies unter der Annahme, Oracle das Problem beheben oder optimieren wird nicht zu vermeiden? (und in Fairness hat das MAF-Entwicklungsteam MAF in der Version 2.2 stark optimiert).

Letztlich ist die Lösung, die Anzahl der Funktionen in Ihrer Anwendung zu reduzieren und letztendlich (wenn möglich) auf nur 1 Funktion zu reduzieren. Wenn die App startet, erhalten Sie den weißen Blitz einmal, aber nicht wieder. Aber das wirft die Frage auf, wie MAF Sie dazu bringt, Funktionen zu verwenden, die vom Sprungbrett aufgerufen werden? Können wir wirklich alle Funktionen reduzieren?

Wenn Sie denken über Ihre MAF-Anwendung, Sie haben in der Regel 1-Funktion für das Sprungbrett, dann vielen anderen Features für verschiedene nützliche Teile Ihrer App. Nennen wir das "Sprungbrett" -Feature (Singular) und die "Logik" -Merkmale (Plural).

Die Lösung ist daher:

1) alles aus Ihren vorhandenen Logik-Funktionen bewegen (aber die Sprungbrett-Funktion), dh all AMX-Seiten und andere Komponenten wie Managed Bean in Ihrer Aufgabe fließen in 1 neue einzelne Logikfunktion. Erstellen Sie für jede der bereits vorhandenen Logikfunktionen, die jetzt in dieser einzelnen neuen Logikfunktion eingebettet sind, eine Platzhalter-Navigation für jede Komponente, damit auf sie zugegriffen werden kann und geben Sie jeder einen Namen. z.B. goFirstFeature, goSomeOtherNameFeature etc

2) für die aktuelle Sprung Feature wird es bleiben, aber wir ändern müssen, wie es funktioniert.

Normalerweise erstellen Kunden eine Springboard-Funktion mit einer Listenansicht, um ihre Funktionen zu navigieren (und nicht zu verwenden, um das automatisch generierte Sprungbrett). Da unser Ziel darin besteht, die Logikfunktionen zu eliminieren und sie durch die neue Logikfunktion zu ersetzen, wird das ursprüngliche Sprungbrett nicht funktionieren, da es die anderen ursprünglichen individuellen Geschäftsfunktionen (statt unserer neuen Super-Single-Logik-Funktion) aufrufen soll.

Stattdessen, was wir tun müssen, ist das Listview mit Listitem codieren jede einzelne (logische) Funktion in unserer neuen Single-Logik-Funktion, die als Platzhalter zu nennen. So etwas wie die folgenden:

<amx:commandButton text="Go First Feature" id="cb1" actionListener="#{viewScope.myBean.goFirstFeature}"/> 
<amx:commandButton text="Go Second Feature" id="cb2" actionListener="#{viewScope.myBean.goSecondFeature}"/> 

Dies wird durch eine Bohne mit dem folgenden Code gesichert ist:

public class MyBean { 

    private void doFeatureNavigation( 
      String featureId, String navigationFlowCase) { 
        AdfmfContainerUtilities.hideSpringboard(); 
        AdfmfContainerUtilities.invokeContainerJavaScriptFunction(featureId, 
            "adf.mf.api.amx.doNavigation", new Object[] { navigationFlowCase }); 
    } 

    public void goFirstFeature(ActionEvent actionEvent) { 
        doFeatureNavigation("package.name.of.new.single.logic.feature", "goFirstFeature"); 
    } 

    public void goSecondFeature (ActionEvent actionEvent) { 
        doFeatureNavigation("package.name.of.new.single.logic.feature", "goSecondFeature"); 
    } 
} 

Beachten Sie, wie der Code das Sprungbrett versteckt, dann in Zusammenhang mit der Single-Partner Funktion navigiert zu einem der die Wildcard-Navigationsregeln, die Sie zuvor in der neuen einzelnen Logikfunktion festgelegt haben.

3), ob alle Ihre bestehenden Logik-Funktionen haben AMX Seiten mit dem Befehl Steuerelemente, die auf andere Logik-Funktionen navigieren, müssen Sie den Code ändern, um die Platzhalter zu nennen:

<amx:commandButton id="cb5" action="goFirstRequest"/> 

So fühlt es sich wie eine Menge Erklärung, aber es ist wirklich 3 Schritte.Nachdem Sie dies dann zufriedenstellend getestet haben, können Sie damit beginnen, redundante originale Logikfunktionen und Task Flows zu eliminieren. Löschen Sie keine AMX-Seiten, PageDefs oder Beans, löschen Sie einfach die redundanten Features und Taskflows.

Ich habe in schlagen vor, die Lösung, die eine Menge von Annahmen auf dem Weg hier gemacht, wie ich die App nicht gesehen haben. Aber ich hoffe, dies wird Ihnen einen Eindruck davon geben, was die Lösung ist.

Und auch die Sie wirklich brauchen, darüber nachzudenken, ist dies ein großes Problem und sollten Sie wirklich die Lösung übernehmen. Persönlich mit den neuesten optimierten Versionen von MAF auf Android und schnelleren Android-Geräten habe ich dieses Problem seit einiger Zeit nicht mehr gesehen. Grundsätzlich ist der Weiß-Blitz so schnell, dass es kein erkennbares Problem mehr ist. Da echte mobile Nutzer die App im Hintergrund laufen lassen, sehen sie dieses Problem einmal und werden es erst wieder sehen, wenn sie die App beenden und neu starten. Sie müssen also darüber nachdenken, ob Sie ein Problem beheben, das die Mehrheit Ihrer Kunden nicht sieht.

+0

Vielen Dank für Ihre Antwort, aber Sie sind falsch ... Das war nicht ich und ich habe keine Antwort auf die Frage, die ich fragte. –

+0

Wenn Sie eine Antwort haben, bitte sagen Sie mir ... –

+0

Ich habe nur die Frage kopiert, das ist alles. –