Supposons que mon ui-thread d'activité génère un thread séparé à un moment donné. Est-il sûr que ce nouveau fil déclenche une Intention pour lancer une nouvelle activité?Est-il sécuritaire de lancer et d'activité à partir d'un thread non-ui?
Merci
Supposons que mon ui-thread d'activité génère un thread séparé à un moment donné. Est-il sûr que ce nouveau fil déclenche une Intention pour lancer une nouvelle activité?Est-il sécuritaire de lancer et d'activité à partir d'un thread non-ui?
Merci
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
.
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]
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);
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é. –
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