À l'aide de AsyncTask pour démarrer l'activité
Je suis en utilisant asyncTask pour afficher la boîte de Dialogue, puis après quelques minutes, puis le lancement d'une nouvelle activité.
malheureusement que le début de l'activité avant que la tâche est finie ???
package com.android.grad;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.widget.Toast;
public class LoginTask extends AsyncTask<Void, Void, Boolean> {
private Activity activity;
private ProgressDialog pd;
public LoginTask(Activity activity) {
this.activity = activity;
}
@Override
protected void onPreExecute() {
pd = ProgressDialog.show(activity, "Signing in",
"Please wait while we are signing you in..");
}
@Override
protected Boolean doInBackground(Void... arg0) {
try {
Thread.sleep(10000000);
} catch (InterruptedException e) {
}
pd.dismiss();
return true;
}
@Override
protected void onPostExecute(Boolean result) {
Toast.makeText(activity, Boolean.toString(result), Toast.LENGTH_LONG).show();
}
}
et j'exécute la tâche de cliquez sur le bouton de l'écouteur :S
private OnClickListener loginOnClick = new OnClickListener() {
public void onClick(View v) {
new LoginTask(LoginActivity.this).execute();
startActivity(new Intent(LoginActivity.this, BuiltInCamera.class));
}
};
Est-il moyen de startActivity de mon sous-classe ofAsyncTask .
oui, vous devez le démarrer dans votre onPostExecute méthode, juste après que vous montrez votre Toast
la méthode ne peut pas appeler à l'intérieur de onPostExecute
améliorer votre acceptancy taux..
la méthode ne peut pas appeler à l'intérieur de onPostExecute
améliorer votre acceptancy taux..
OriginalL'auteur Mahmoud Emam | 2012-05-24
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez commencer l'activité de AsyncTask de la sous-classe. Voir ci-dessous:
Après cette modification, assurez-vous que vous ne supprimez startActivity de
OnClickListener
activity
est la référence à votre Activité, c'est à dire reçu par l'AsyncTask du constructeur.Et si l'activité est détruite?
puis il va se planter. pour être sûr de faire un chèque si
activity != null
avant à l'aide de sa référenceJ'ai trouvé une meilleure solution: stackoverflow.com/a/9118319/842697
OriginalL'auteur waqaslam
Appel de cette
startActivity(new Intent(LoginActivity.this, BuiltInCamera.class));
deonPostExecute()
après l'Affichage de toast message.De cette façon, la nouvelle activité sera appelé après votre
AsyncTask
.OriginalL'auteur Shrikant
Vous pouvez également utiliser
OriginalL'auteur Atish Dabholkar
Appel
startActivity
à l'intérieur deonPostExecute
méthode deAsyncTask
u devrait utiliser YourClassActivityName.c'.startActivity. Ensuite, il sera
Cela ne fonctionne que si le
AsyncTask
est un intérieur de classeOriginalL'auteur Raghu Nagaraju