Asynctask Erreur De Manipulation
Je suis en utilisant AsyncTask
pour effectuer certains calculs d'arrière-plan, mais je suis incapable de trouver une bonne façon de gérer les exceptions. Actuellement, je suis en utilisant le code suivant:
private class MyTask extends AsyncTask<String, Void, String>
{
private int e = 0;
@Override
protected String doInBackground(String... params)
{
try
{
URL url = new URL("http://www.example.com/");
}
catch (MalformedURLException e)
{
e = 1;
}
//Other code here...
return null;
}
@Override
protected void onPostExecute(String result)
{
if (e == 1)
Log.i("Some Tag", "An error occurred.");
//Perform post processing here...
}
}
Je crois que la variable e maye être écrite/accessible à la fois par le principal et le thread de travail. Comme je sais que onPostExecute()
sera exécutée uniquement après doInBackround()
a fini, je peux omettre toute synchronisation?
Est-ce un mauvais code? Est-il d'accord ou bonne façon de gérer les exceptions dans un AsyncTask
?
double possible de AsyncTask et la gestion des erreurs sur Android
OriginalL'auteur Leo | 2010-09-11
Vous devez vous connecter pour publier un commentaire.
J'ai fait de mes applications, je suppose qu'il n'y a pas une meilleure façon.
Vous pouvez également lire les Mark Murphy répondre à ce sujet.
OriginalL'auteur
Je pense que votre code pour le travail, mais il y a déjà une sorte d'erreur de manipulation intégrés dans le AsyncTask classe.
Vous pouvez éviter d'utiliser une variable supplémentaire à l'aide de la annuler() de la méthode et méthode de gestionnaire d' onCancelled(). Lorsque vous appelez annuler dans le doInBackground() méthode de la onCancelled méthode dans le thread de l'INTERFACE utilisateur. Si vous appelez de l'annuler(true) ou d'annuler(faux) dépend de vos besoins.
Pourquoi? Vous pouvez ajouter à l'essai, la clause autant de catch de la classe que tu veux. Dans chaque fourre-déclaration de u peut appeler la suppression de la Méthode. Vous pouvez également catch(Exception e) qui intercepte tous les types d'Exceptions. Ai-je eu u droit, Leo? Cependant, il est de bonne pratique de l'appel d'annuler() lorsque des Exceptions sont levées, ou est-il un autre moyen de gestion d'Exception mis en œuvre?
L'annuler() de la manipulation de l'erreur est très proche de ce qui se passe réellement. Votre traitement a été annulé à cause d'une erreur. Vous pouvez toujours économiser de l'état sur l'ASyncTask qui peut être lu par le thread d'INTERFACE utilisateur pour obtenir plus d'information sur ce que l'erreur a été.
OriginalL'auteur
C'est garanti, même sur une architecture SMP. Tous la synchronisation est faite pour vous. Il serait cependant préférable d'utiliser la valeur de retour pour ce faire.
onPostExecute()
fonction très facilement?Tout d'abord, doInBackground doit retourner un objet du même type que le paramètre dans onPostExecute(). Ensuite, il vous suffit de créer une classe personnalisée pour encapsuler le résultat + exception: classe ResultHolder { Exception e; MyResult r; }
OriginalL'auteur