2010-07-21 3 views

Antwort

9

Ich könnte falsch sein, aber ich denke, startActivity() intern im UI-Thread ausgeführt wird. Also ja, es sollte sicher sein.

Wenn Sie 100% sicher sein möchten, rufen Sie Ihre startActivity() in Ihrer Aktivität runOnUiThread() als Runnable.

+1

Ich überprüfte den Quellcode für 'startActivity()' und ja, es läuft auf dem Haupt-Thread, so dass Sie es sicher aus dem Hintergrund aufrufen können. –

+0

Es ist nicht in allen Firmwares/Fällen. Ich bekomme 'java.lang.RuntimeException: Kann keinen Handler innerhalb des Threads erstellen, der Looper.prepare()' nach dem Aufruf 'startActivityForResult' nicht aufgerufen hat. Sie müssen dies im UI-Thread ausführen oder in einer schlechten Implementierung können Sie einige Abstürze bekommen. – Enyby

0

Ich habe ein Experiment gemacht: - begann Aktivität von nicht UI-Thread und in onCreate() von 1 bis 100 einen Zyklus gesetzt, wo ich Thread-Name Thread.currentThread Druck wurde() - rechts den gleichen Zyklus setzt nach Tätigkeit in nicht ui Thread starten

Output sie gleichzeitig Namen Thema [AsyncTask # 1,5, Haupt] und Gewinde [main, 5, main]

4

die ersten Zeilen der startActivityForResult() (verwendet von allen startActivity() zeigte Varianten) schlägt vor, dass es in Ordnung ist:

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); 
Verwandte Themen