2010-07-21 1 views

Répondre

9

Je peux me tromper, mais je pense que startActivity() en interne dans le exécute thread d'interface utilisateur. Alors oui, ça devrait être sûr. Si vous voulez être sûr à 100%, appelez votre startActivity() dans votre activité runOnUiThread() comme Runnable.

+1

J'ai vérifié le code source de 'startActivity()' et oui, il fonctionne sur le thread principal, donc vous pouvez l'appeler en toute sécurité. –

+0

Ce n'est pas dans tous les firmwares/cas. Je reçois 'java.lang.RuntimeException: Impossible de créer un gestionnaire à l'intérieur d'un thread qui n'a pas appelé Looper.prepare()' après l'appel 'startActivityForResult'. Vous devez l'exécuter dans le thread d'interface utilisateur ou dans une mauvaise implémentation, vous pouvez obtenir des plantages. – Enyby

0

J'ai fait une expérience: - l'activité a commencé à partir de fils non ui et onCreate() mettre un cycle de 1 à 100, où i imprimions nom fil Thread.currentThread() - mettre le même cycle juste après l'activité commencer en fil non ui

sortie a été simultanément, ils montrent des noms Enfilez [AsyncTask # 1,5, principal] et Discussion [principale, 5, principal]

4

les premières lignes de startActivityForResult() (utilisé par tous les startActivity() variantes) suggère que c'est 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); 
Questions connexes