Supponiamo che il mio thread di attività nasconda un thread separato ad un certo punto. È sicuro che quel nuovo thread spari un intent per il lancio di una nuova attività?È sicuro lanciare e attività da un thread non-ui?
Grazie
Supponiamo che il mio thread di attività nasconda un thread separato ad un certo punto. È sicuro che quel nuovo thread spari un intent per il lancio di una nuova attività?È sicuro lanciare e attività da un thread non-ui?
Grazie
potrei sbagliarmi, ma penso startActivity()
esegue internamente nel thread UI. Quindi sì, dovrebbe essere sicuro.
Se si voleva essere sicuro al 100%, richiamare la vostra startActivity()
nella vostra attività di runOnUiThread()
come Runnable
.
ho fatto un esperimento: - attività iniziata a partire da fili non ui e in onCreate() mettere un ciclo da 1 a 100, dove i stampavano filo nome Thread.currentThread() - mettere lo stesso ciclo di destra dopo l'attività inizia in discussione non ui
uscita è stata allo stesso tempo mostrando loro nomi discussione [AsyncTask # 1,5, principale] e filetto [principale, 5, principale]
le prime righe di startActivityForResult()
(utilizzato da tutti i startActivity()
varianti) suggerisce che sia ok:
public void startActivityForResult(Intent intent, int requestCode, Bundle options) {
if (mParent == null) {
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode, options);
Ho controllato il codice sorgente per 'startActivity()' e sì, esso viene eseguito sul thread principale in modo da essere sicuri di chiamarlo dallo sfondo. –
Non in tutti i firmware/casi. Ricevo 'java.lang.RuntimeException: Impossibile creare il gestore all'interno del thread che non ha chiamato Looper.prepare()' dopo la chiamata 'startActivityForResult'. È necessario eseguire questo nel thread dell'interfaccia utente o in alcune cattive implementazioni è possibile ottenere alcuni arresti anomali. – Enyby