2010-10-12 36 views
1

我的問題是,我有一個程序工作之前,沒有線程,並花了很長時間來處理信息(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(); 
     } 
    } 
} 

什麼在那裏可能造成這種情況? :|

回答

0

這可能是因爲您的線程優先級可能不會很高。我記得默認值很低。但是,對於你正在做的事情,它不應該花費幾秒鐘。我認爲真正的問題在於API連接到網絡上並做了需要很長時間的事情。特別是,如果每次調用打開一個新的套接字,那麼執行事件獲取的那個for循環將會做很多工作,假設這是用於FIRST匹配的。 :P

+1

是的!這是第一場比賽! <3 xD 有沒有辦法提高優先級? 我的程序運行得非常好,其他時間很快,而且在UI線程中實際運行更快! – Nick 2010-10-12 04:32:22

+0

嗯。我認爲有一種方法可以爲AsyncTask做到這一點,但我猜不是。我認爲你真正的問題是要麼連接到數據源,要麼你如何解析XML。對於這種操作,主UI線程上16秒似乎有點慢。 – 2010-10-12 16:21:35

+0

是因爲我正在使用: 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

0

我有同樣的問題,沒有什麼比使用簡單的DES解密文件副本...整個事情在幾秒鐘內在UI線程上運行,但是當移到ASYNCTASK中時,它現在正在MINUTES完成。難以置信的。