Domanda

Ho un app Android con una schermata iniziale.

Questa schermata iniziale di pre-carica i dati e quando inizia l'attività finiti e finiture principale dell'applicazione (tramite una chiamata finitura ()).

Questo funziona abbastanza bene fino a quando l'applicazione non è completamente ucciso. Quindi, posso solito passare avanti e indietro tra i diversi compiti come al solito: quando lascio l'applicazione da un'attività secondaria e torno subito dopo sarò presentato con questa attività sub

.

Ora, quando lascio questa attività sub e fare alcune altre cose per un po 'inevitabilmente questo processo di applicazione viene ucciso dal sistema operativo.

Nessun problema finora. Ora mi aspetto di Android, essendo a conoscenza della mia precarico (se i dati non è stato precaricato sarebbe solo prendere più o non visualizzare alcuni tipi di carattere, ma Android non può essere a conoscenza del fatto che sto facendo da qualche parte precarico), per ripristinare l'attività di sub da un fascio. Tuttavia viene avviato l'attività di schermata iniziale.

Quindi, io dico, va bene allora ... l'attività splash screen è dopo tutto / attività principale del lanciatore. Ora, il mistero reale che ho è il seguente.

Quando si preme il pulsante di ritorno da questa schermata iniziale appena caricato io sarà presentato con l'attività sub ho lasciato l'applicazione da prima che fosse ucciso. Io davvero non capisco questo. A quanto pare Android ha salvato lo stato della attività di sub (e la sua pila di storia) per essere ricaricati, ma invece di ricaricare ha scelto di iniziare la schermata iniziale, invece, con questa attività sub (ho lasciato il compito in precedenza prima che fosse ucciso) uno indietro passo sulla l'attività dello stack.

Perché accade questo?

Quando il processo non viene ucciso posso tornare a dove ho lasciato. Quando è ucciso non posso (ma che hanno ancora tutta la precedente storia di quel app restaurato). So che Android ha da stato di carico, ecc in quest'ultimo caso, ma che non dovrebbe essere un problema e viene eseguita automaticamente per default (secondo la documentazione).

P.S. Io non sto facendo nulla di fantasia. bandiere di lancio predefinite, ripristino nessuno stato sovrascritto metodi, ecc.

È stato utile?

Soluzione

Hey provare questo le sue opere per me dobbiamo prendere una booleano Bandiera, ti gestire questo problema e quando si preme il pulsante di nuovo durante il caricamento della schermata di avvio si fermerà che l'attività in modo da problema di caricamento automatico risolverà sperare il suo utile per te.

public class Main extends Activity {

    ImageView imageLogo;
    LinearLayout myLayout;
    private Thread splashTread;
    private boolean isBackPressed = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        splashTread = new Thread() {
            public void run() {
                try {
                    sleep(3000);
                    if (!isBackPressed) {

                        Intent myIntent = new Intent(
                                "src.SplashScreen.com.MENU");
                        startActivity(myIntent);

                    }

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                finally {

                    finish();

                }
            }

        };

        splashTread.start();

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            isBackPressed = true;
            finish();
        }
        return super.onKeyDown(keyCode, event);

    }

}

Altri suggerimenti

Questo è un problema noto Android con due istanze di applicazione. La questione è stata ufficialmente rintracciato qui e qui .

La soluzione è qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top