Synchrone startActivityForResult - dans l'Attente de l'Activité pour Compléter
J'ai une application dans laquelle je suis en train de lancer une nouvelle Activité, et nécessité d'avoir le résultat de l'activité avant de continuer.
Je me rends compte que startActivityForResult est asynchrone /non-blocage, et que je peux obtenir le résultat de l'activité dans le onActivityResult de rappel.
Donc je suppose que ce que je cherche est le meilleur moyen d'attendre pour l'activité de revenir...
Quelque chose comme ceci peut-être? Ou est-il un meilleur moyen?
Activité Lanceur Fonction:
public String ActivityLauncher()
{
//Set up Intent
startActivityForResult(intent, 1);
while (mIsActivityDone == false)
{
Thread.Sleep(250);
}
//Continue with processing
String data = "<Data from Activity">
return data;
}
Rappel:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
//Pull out the data
mIsActivityDone = true;
}
Les données doit être renvoyé à un niveau supérieur d'appel de la fonction - c'est pourquoi j'ai besoin d'attendre le résultat de la ActivityLauncher fonction.
Merci!
OriginalL'auteur J J | 2011-06-14
Vous devez vous connecter pour publier un commentaire.
Cela va bloquer votre thread de l'INTERFACE utilisateur afin que les autres activités ne seront pas exécutés.
Je voudrais utiliser une sorte de classe de rappel fournie par le niveau supérieur de la fonction, dans ce genre de situation et appeler sa fonction de rappel dans
onActivityResult
onActivityResult()
méthode. Si vous avez besoin de le faire plusieurs fois, c'est bien aussi: c'est pourquoi startActivityForResult() prend unint requestCode
argument, qui est passé àonActivityResult()
, alors vous savez à qui la demande est de retour.Merci, j'apprécie l'architecture de l'aide.
OriginalL'auteur Alex Gitelman
Si vous pouvez commencer ces activités à partir d'un nouveau thread Android a une solution pour vous. Vous pouvez utiliser l'Instrumentation. Pourquoi avez-vous besoin d'un nouveau thread? Parce que startActivitySync va vérifier si vous l'invoquer dans un thread principal. Si son thread principal, alors il va lever une exception.
Instrumentation permet de surveiller une activité. Vous pouvez surveiller cette activité soit en bloquant ou non bloquant la mode.
Bonne suggestion. Veux juste ajouter que cela ne fonctionne que si vos activités de résider dans le même processus (app). L'API ne fonctionne pas au-delà du processus.
OriginalL'auteur Vicky Singh