2010-07-21 27 views

Respuesta

9

podría estar equivocado, pero creo que startActivity() ejecuta internamente en el hilo de interfaz de usuario. Entonces sí, debería ser seguro.

Si quiere estar 100% seguro, invoque su startActivity() en el runOnUiThread() de su actividad como Runnable.

+1

Comprobé el código fuente para 'startActivity()' y sí funciona en el hilo principal, por lo que es seguro llamarlo desde el fondo. –

+0

No en todos los firmwares/casos. Obtengo 'java.lang.RuntimeException: No se puede crear el controlador dentro de la cadena que no ha llamado a Looper.prepare()' después de la llamada 'startActivityForResult'. Necesita ejecutar esto en el hilo de UI o en alguna mala implementación puede obtener algunos bloqueos. – Enyby

0

I han hecho un experimento: - actividad se inició a partir de hilos no ui y en onCreate() poner un ciclo de 1 a 100 donde i estaba imprimiendo nombre hilo Thread.currentThread() - poner el mismo ciclo correcto después de la actividad iniciar en hilo no ui

salida estaba mostrando simultáneamente que nombres Tema [AsyncTask # 1,5, principal] e hilo [principal, 5, principal]

4

las primeras líneas de startActivityForResult() (utilizado por todo el startActivity() variantes) sugiere que está bien:

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); 
Cuestiones relacionadas