我的問題是,我有一個程序工作之前,沒有線程,並花了很長時間來處理信息(16秒獲取XML數據並顯示它)。現在我已經完成了整個線程和異步的事情,但由於某種原因,它正在讓我的程序變慢(在模擬器中,設備現在不可用),有沒有我所做的任何事情可能造成這種情況, UI線程很好,但我的異步線程需要一分半鐘才能執行。 (當我在UI線程有它用於拍攝只有16秒,但凍結UI線程)Asynctask採取荒謬的時間
這裏是我的線程代碼,它位於主類的內部:
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();
}
}
}
什麼在那裏可能造成這種情況? :|
是的!這是第一場比賽! <3 xD 有沒有辦法提高優先級? 我的程序運行得非常好,其他時間很快,而且在UI線程中實際運行更快! – Nick 2010-10-12 04:32:22
嗯。我認爲有一種方法可以爲AsyncTask做到這一點,但我猜不是。我認爲你真正的問題是要麼連接到數據源,要麼你如何解析XML。對於這種操作,主UI線程上16秒似乎有點慢。 – 2010-10-12 16:21:35
是因爲我正在使用: javax.xml.parsers.DocumentBuilderFactory; javax.xml.parsers.DocumentBuilder; org.xml.sax.SAXException; org.xml.sax.SAXParseException; 那些而不是android.sax? – Nick 2010-10-12 21:36:27