Autore Topic: Avviare una splashscreen solo all'avvio dell'applicazione  (Letto 1902 volte)

Offline francescog

  • Nuovo arrivato
  • *
  • Post: 27
  • Scaricate TabooDroid. La mia prima app!
  • Respect: 0
    • Mostra profilo
Avviare una splashscreen solo all'avvio dell'applicazione
« il: 01 Febbraio 2013, 03:25:25 CET »
0
Salve,

Vorrei visualizzare nella mia applicazione una splashscreen che si visualizza solo quando l'app viene fatta partire (ergo alla priima installazione e quando viene terminata e non "riesumata"). Devo lavorare con gli intent e category nel manifest per fare questo? Grazie!
Non dimenticate di scaricare la mia app TabooDroid. E soprattutto le cinque stelle! ;)

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Avviare una splashscreen solo all'avvio dell'applicazione
« Risposta #1 il: 01 Febbraio 2013, 09:57:05 CET »
+1
Prima di realizzare uno splashScreen, analizza se è veramente necessario alla tua applicazione.
Sono veramente poche le applicazioni che richiedono uno splashScreen, come per esempio i giochi o applicazioni di realtà aumentata.

Innanzituto lo splashScreen :
  • non è un pattern UI di android; è molto utilizzato nel mondo iOS dove non solo è un pattern ma è anche supportato a livello tecnico da meccanismi che lo implementano nativamente.
  • blocca la videata... il che è contro uno dei pattern per eccellenza di Android, cioè la responsivity
  • in genere richiede uno sforzo realizzativo non banale (proprio perchè non esiste un modo nativo),
  • impiega risorse di sistema inutilmente senza apportare alcun beneficio finale all'utente.
  • ultimo ma non cosi irrilevante, poichè devi prevedere diverse risoluzioni , il tuo apk finale sarà molto più pesante.

Fatta questa premessa che ritenevo importante puoi trovare proprio su anddev un tutorial su questo (... mi perdoni l'autore se sono contrario agli splashScreen)
[medio] Advanced SplashScreen – caricare Activity in background - Android Developers Italia

Se proprio vuoi realizzarlo (ma te lo sconsiglio veramente) devi realizzare una Activity che come sempre va registrata nel manifest.
Tieni presente alcune cose essenziali:
- il caricamento lo devi fare con un Thread altrimenti rischi che la tua applicazione sia tagliata direttamente dal sistema perchè non risponde
- al termine devi toglierla dallo stack, altrimenti con il tasto back rischi di richiamarla

Qualcosa di questo tipo (è proprio uno scheletro):

Codice (Java): [Seleziona]
public class SplashScreen extends Activity {
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash_screen);
         Handler handler = new Handler();
 
        // run a thread after 2 seconds to start the home screen
        handler.postDelayed(new Runnable() {
 
            @Override
            public void run() {
                finish();
                Intent intent = new Intent(SplashScreen.this, Home.class);
                SplashScreen.this.startActivity(intent);
            }
        }, 2000);
    }
}

Ricordati di togliere l'actionbar e visualizzarlo in full screen tramite dichiarazione nel  manifest o tramite style
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"


Ti riporto alcuni link interessanti, scritte da persone che hanno una grande risonanza nel mondo android
The Radioactive Yak: What You Can Do With Your Modal Dialogs and Splash Screens (and the Horse They Rode In On)  (è di Reto Meier, lavora in Google ed è ha scritto un libro famosissimo che è quasi un must).
Cyril Mottier » Splash screens are evil, don’t use them!  (Cyril Mottier)

Quest'ultimo, nelle ultime settimane ha fatto notare come esiste un meccanismo interno ad android per avere una immagine di avvio (che però non va confusa con una splashScreen)
Cyril Mottier » Android app launching made gorgeous

Offline francescog

  • Nuovo arrivato
  • *
  • Post: 27
  • Scaricate TabooDroid. La mia prima app!
  • Respect: 0
    • Mostra profilo
Re:Avviare una splashscreen solo all'avvio dell'applicazione
« Risposta #2 il: 01 Febbraio 2013, 10:32:38 CET »
0
§Aveo già letto l'articolo che spiega le differenze tra la splashscreen di iOs e perchè nn bisogna usarla per android. Alla fine mi sa che non la inserirò, ma ora sono curioso di risolvere questo mio problema. Magari mi potrà servire in un futuro prossimo. Mi spiego meglio.
Quando l'utente preme il tasto "back" esce dall'applicazione, ma ovviamente non viene terminata. Quando si ritorna al programma vorrei far visualizzare la mia "HomeActivity" e non per esempio "SplashActivity". E' possibile farlo?

PS avevo utilizzato lo stesso codice che mi hai postato XD Ti ringrazio per l'aiuto! Respect :)
Non dimenticate di scaricare la mia app TabooDroid. E soprattutto le cinque stelle! ;)

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Avviare una splashscreen solo all'avvio dell'applicazione
« Risposta #3 il: 09 Febbraio 2013, 21:24:31 CET »
0
§Aveo già letto l'articolo che spiega le differenze tra la splashscreen di iOs e perchè nn bisogna usarla per android. Alla fine mi sa che non la inserirò, ma ora sono curioso di risolvere questo mio problema. Magari mi potrà servire in un futuro prossimo. Mi spiego meglio.
Quando l'utente preme il tasto "back" esce dall'applicazione, ma ovviamente non viene terminata. Quando si ritorna al programma vorrei far visualizzare la mia "HomeActivity" e non per esempio "SplashActivity". E' possibile farlo?

PS avevo utilizzato lo stesso codice che mi hai postato XD Ti ringrazio per l'aiuto! Respect :)
Salva una preferenza del tipo "primo avvio". Come activity da lanciare quando l'utente avvia l'app, metti la tua Home. Qui controlli la preferenza, se é il primo avvio mostri lo splash, altrimenti non lo mostri.
Per uno splash che deve essere visualizzato una sola volta (e che non fa nessun lavoro utile) io farei cosí.
Poi ribadisco tutte le considerazioni già fatte sul perché lo splash screen non va usato.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline francescog

  • Nuovo arrivato
  • *
  • Post: 27
  • Scaricate TabooDroid. La mia prima app!
  • Respect: 0
    • Mostra profilo
Re:Avviare una splashscreen solo all'avvio dell'applicazione
« Risposta #4 il: 10 Febbraio 2013, 11:36:52 CET »
0
Alla fine ho deciso di non mettere lo splash screen... in effetti è inutile per android.

Grazie
Non dimenticate di scaricare la mia app TabooDroid. E soprattutto le cinque stelle! ;)