2016-03-22 2 views
3

J'avais créé de petites applications mobiles en utilisant Gluon Mobile et maintenant en test bêta via Google Play. mais je me suis rendu compte que le temps de démarrage de mes applications mobiles sur l'appareil Android est assez lent (prendre plus de 10 secondes). Ce serait génial si je peux ajouter un SplashScreen avant que les applications soient chargées, donc l'utilisateur n'attend pas au total 10 fois, mais il n'en ressent que la moitié parce qu'il a reçu une réponse des applications tout en voyant le SplashScreen.gluon android splash screen

sur le développement natif Android, nous venons de construire 2 activité (un pour SplashScreen et une des applications principales) comme coup:

<activity 
android:name=”.SplashScreen”> 
<intent-filter> 
<action android:name=”android.intent.action.MAIN” /> 
<category android:name=”android.intent.category.LAUNCHER” /> 
</intent-filter> 
</activity> 
<activity 
android:name=”.MainActivity” 
android:label=”@string/app_name” 
> 
<intent-filter> 
<action android:name=”android.intent.action.MAIN” /> 
</intent-filter> 
</activity> 

ma question, est-il approche de montrer SplashScreen qui construisent sur JavaFX/gluon qui sera exécuté à la fois sur andorid/ios plutôt que natif. Y at-il des inconvénients si nous construisons sur javaFX plutôt que cette approche native.

depuis le jeune âge de gluon/javaFX sur mobile, n'est pas facile d'obtenir la meilleure pratique de l'approche idéale. s'il vous plaît m'en-lumière

Rgrds

Répondre

1

Alors qu'un écran Splash pourrait être une bonne idée, en fait les projets multi-View gluons mobile créé avec le gluons Plugin vous permettent de créer un effet similaire en utilisant la vue Accueil comme espace réservé pour une image ou tout autre contenu léger que vous souhaitez afficher, tout en ayant tout le matériel lourd chargé dans une vue secondaire.

Par défaut, la vue de base est la vue initiale chargée lors de la méthode Application.start(). Les autres vues ne seront pas chargées tant que l'utilisateur n'y aura pas accédé.

Avec la vue suivante, uniquement lorsque l'utilisateur clique sur le bouton d'action flottante, la charge réelle de la substance lourde commence, mais la vue de démarrage sur l'appareil mobile est affiché en peu de temps:

public class SplashView extends View { 

    public SplashView(String name) { 
     super(name); 

     setCenter(new ImageView(new Image(getClass().getResourceAsStream("splash.png")))); 

     FloatingActionButton action = new FloatingActionButton(MaterialDesignIcon.ARROW_FORWARD.text, e -> 
       MobileApplication.getInstance().switchView(GluonSplash.SECONDARY_VIEW)); 
     getLayers().add(action); 
    } 

    @Override 
    protected void updateAppBar(AppBar appBar) { 
     appBar.setVisible(false); 
    } 

} 

Pour éviter le besoin d'intervention de l'utilisateur, vous pouvez vous débarrasser du bouton d'action et commencer à charger la deuxième vue, après un certain temps d'affichage de l'éclaboussure.

Dans cet autre exemple, une fois la vue de démarrage affichée, une transition de pause commence. Après une seconde, il affiche l'étiquette pour indiquer que la nouvelle vue sera chargée. En même temps, une tâche pour charger cette vue est démarrée. Lorsque toute la vue des poids lourds est chargée, elle sera affichée.

public class SplashView extends View { 

    public SplashView(String name) { 
     super(name); 

     Label access = new Label("Accessing..."); 
     access.setTranslateY(200); 
     access.setVisible(false); 
     setCenter(new StackPane(new ImageView(new Image(getClass().getResourceAsStream("splash.png"))), 
          access)); 

     Task<Void> task = new Task<Void>() { 

      @Override 
      protected Void call() throws Exception { 
       Platform.runLater(() -> MobileApplication.getInstance().switchView(GluonSplash.SECONDARY_VIEW)); 
       return null; 
      } 
     }; 

     addEventHandler(LifecycleEvent.SHOWN, e -> { 
      PauseTransition pause = new PauseTransition(Duration.seconds(1)); 
      pause.setOnFinished(f -> { 
       access.setVisible(true); 
       new Thread(task).start(); 
      }); 
      pause.play(); 
     }); 

    } 

    @Override 
    protected void updateAppBar(AppBar appBar) { 
     appBar.setVisible(false); 
    } 

} 
+0

En fait, je veux supprimer l'écran noir blanc au début avec un autre contenu/image lumineuse. mais je vais tester si cette approche montrera non seulement quelques secondes avant que les applications sont montrées et l'écran noir vide reste la plupart du temps de chargement. J'espère que vous avez eu mon point de vue. – Wijaya

+0

Justement, l'idée est d'utiliser un Home_View très léger, qui apparaîtra immédiatement. Pour cela, essayez de charger tout ce qui est lié à la deuxième vue uniquement lorsque cette vue est requise. Sinon, le temps de chargement affectera également la vue Accueil/Splash –

+0

Oui, cette approche fonctionne parfaitement. le seul problème que j'ai eu est lorsque l'utilisateur bouton de retour sur Android l'écran peut aller à charger l'image de démarrage. Je peux éviter de revenir de l'appbar, mais ne fonctionne toujours pas pour le bouton de retour de matériel Android (dans le coin en bas à droite). une suggestion/astuce pour surmonter cela? Merci d'avance. – Wijaya

1

Je suis un peu en retard, mais pour les projets futurs cela pourrait être utile:

Il y a un projet sur Github qui étend la fonctionnalité de gluons.
https://github.com/Ciruman/QuarkFX
Il comprend:

  • approche différente Voir la manipulation Wich vous permet de développer pour différentes tailles d'appareils et orientations
  • Il y a aussi un Splash Screen inclus (Il est pas encore configurable, mais puisqu'il est open source, vous pouvez changer rapidement à vos besoins)
  • pour plus de fonctionnalités checkout son readme
+0

est-il opensource? @LucaZ –