Mon problème est que j'avais un programme qui fonctionnait avant, sans thread, et il a fallu beaucoup de temps pour traiter les informations (16 secondes pour obtenir des données XML et les afficher). Maintenant, j'ai tout le threading et async down, mais pour une raison quelconque, il rend mon programme SLOWER (dans l'émulateur, le périphérique n'est pas disponible pour le moment), y at-il quelque chose que j'ai fait qui aurait pu causer cela, le Le thread d'interface utilisateur est correct, mais mon thread asynchrone prend une minute et demie à exécuter. (Quand je l'avais dans le thread d'interface utilisé pour prendre seulement 16 secondes, mais a gelé le thread d'interface utilisateur)Asynctask prenant une quantité de temps ridicule
Voici le code pour mon fils, il se trouve à l'intérieur de la classe principale:
private class TeamSearchTask extends AsyncTask<String,Void,String> {
CharSequence nfo;
String [] matches;
String [] data;
String teamNum;
ProgressDialog loading;
protected void onPreExecute()
{
//Show the 'loading' dialog
loading = new ProgressDialog(SapphireAlliance.this);
loading.setMessage("Loading, please wait...");
loading.show();
}
protected String doInBackground(String... teamNumber)
{
try
{
//Team information ------------------------------------------------------------------------------------
teamNum = teamNumber[0];
//Array of team data
data = APIconnection.getTeams(teamNum, "");
//Display basic team info
nfo = ("\nFormal Team Name:\n" + data[1] +
"\n\nLocation:\n" + data [3] + ", " + data[4] + ", " + data[5] +
"\n\nRookie Year:\n" + data[6] +
"\n\nRobot Name:\n" + data[7] +
"\n\nWebsite:\n" + data[8] + "\n\n\n\n\n\n\n\n\n");
//Make match archive --------------------------------------------------------------------------------------
String [] events = APIconnection.getEventIdsByYear(year1);
ArrayList<String> matches = new ArrayList<String>();
for (int i = 0; i<events.length; i++)
{
String [] add = APIconnection.getMatches2(teamNum, events[i] ,"","");
for(int j = 0; j<add.length; j++)
matches.add(add[j]);
}
String [] out = new String [matches.size()];
matches.toArray(out);
return "";
}
catch(Exception e)
{
return e.toString();
}
}
protected void onPostExecute(String result) {
if(result.equals(""))
{
info.setText(nfo);
matchArchive(matches);
//title
CharSequence ttl = "Team " + teamNum;
titlets.setText(ttl.toString());
loading.dismiss();
}
else
{
alert.setMessage(result);
alert.show();
}
}
}
Tout là-dedans qui pourrait causer cela? : |
Oui! C'est pour les premiers matchs! <3 xD Existe-t-il un moyen d'augmenter la priorité? Mon programme s'exécute extrêmement bien et rapidement d'autres fois et a couru en réalité plus rapidement quand il était sur le fil de l'interface utilisateur! – Nick
Hm. Je pensais qu'il y avait un moyen de le faire pour AsyncTask, mais je suppose que non. Je pense que votre véritable problème est de savoir comment vous vous connectez à la source de données ou comment vous analysez le XML. 16 secondes sur un fil d'interface utilisateur principal semble un peu lent pour ce genre d'opération. –
Est-ce peut-être parce que j'utilise: javax.xml.parsers.DocumentBuilderFactory; javax.xml.parsers.DocumentBuilder; org.xml.sax.SAXException; org.xml.sax.SAXParseException; ceux au lieu de android.sax? – Nick