Asynctask采取了荒谬的时间

时间:2010-10-12 03:06:56

标签: android android-asynctask

我的问题是我之前有一个程序正在运行,没有线程化,并且花了很长时间来处理信息(16秒获取XML数据并显示它)。现在我已经完成了整个线程和异步的事情,但由于某种原因它使我的程序SLOWER(在模拟器中,设备现在不可用),有没有我做过的可能导致这个, UI线程很好,但我的异步线程需要一分半钟才能执行。 (当我在UI线程中使用它只用了16秒,但冻结了UI线程)

这是我的线程的代码,它位于主类的内部:

    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();
        }
    }
}

那里有什么可能导致这个? :|

2 个答案:

答案 0 :(得分:0)

可能是您的线程优先级可能不会设置得很高。我记得默认值很低。但是,对于你正在做的事情,它不应该花费超过几秒钟。我认为真正的问题在于APIconnection进入网络并做一些需要很长时间的事情。特别是,如果每个调用打开一个新套接字,那么执行事件获取的for循环将会做很多工作,假设这是用于FIRST匹配。 :P

答案 1 :(得分:0)

我遇到了同样的问题,只做一个带有简单DES解密的文件副本......整个过程在UI线程上运行了几秒钟,但是当移动到ASYNCTASK时,它现在需要MINUTES来完成。难以置信的。

相关问题