2016-04-03 12 views
5

Sono molto nuovo ad Android. Spero che questa non sia una domanda stupida.startActivty in un thread diverso

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    new Thread(new Runnable() 
    { 
     public void run() 
     { 
      Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
      startActivity(intent); 
     } 
    }).start(); 
} 

Domanda: perché funziona? è normale che startActivity possa essere chiamato da un thread secondario?

Ho pensato che tutte le cose relative all'interfaccia utente dovevano essere fatte nel thread dell'interfaccia utente.

+0

'.run()' esegue il codice sul thread corrente. Dovresti chiamare '.start()' per eseguirlo su una nuova discussione. Non risponde alla domanda ma almeno ti fa sapere che questa non è una vera prova della tua domanda. –

+0

@GeorgeMulligan Hai ragione, ma era un errore di battitura. Intendevo start(), mio ​​male. Non posso accettare la risposta di Doug, devo aspettare 9 minuti sembra ... – James

risposta

3

startActivity non è immediato. Pianifica l'avvio dell'attività per l'esecuzione al successivo ciclo disponibile sul thread principale, quindi puoi chiamarlo da qualsiasi luogo. (Ciò non significa necessariamente che sia comunque una buona idea.)

Non si deve toccare la gerarchia della vista in nessun punto eccetto il thread principale. Questo è un problema diverso.

metodo
1

startActivity può essere chiamato da qualsiasi Activity Context

Una nuova istanza del thread ha accesso alla Context, che a sua volta ha una Activity. Questo è il motivo per cui il tuo codice funziona.

Si noti che se questo metodo viene chiamato dall'esterno di un Activity Context, poi il Intent deve includere la bandiera lancio FLAG_ACTIVITY_NEW_TASK . Ciò è dovuto al fatto che, senza essere avviato da uno- esistente, non esiste un'attività esistente in cui collocare la nuova attività e quindi deve essere collocata nella propria attività separata.

Questo metodo genera ActivityNotFoundException se non è stato trovato Activity per eseguire l'Intento specificato.

Per ulteriori informazioni, leggere this developer manual

Problemi correlati