Android 异步任务占用了大量的时间

Android 异步任务占用了大量的时间,android,android-asynctask,Android,Android Asynctask,我的问题是,我以前有一个程序在工作,没有线程,处理信息花费了很长时间(获取XML数据并显示它需要16秒)。现在我已经完成了整个线程和异步的工作,但是由于某种原因,它使我的程序变慢了(在模拟器中,设备现在不可用),我是否做了任何可能导致这种情况的事情,UI线程很好,但我的异步线程需要一分半钟才能执行。(当我在UI线程中使用它时,通常只需要16秒,但冻结了UI线程) 下面是我的线程的代码,它位于主类中: private class TeamSearchTask extends AsyncTa

我的问题是,我以前有一个程序在工作,没有线程,处理信息花费了很长时间(获取XML数据并显示它需要16秒)。现在我已经完成了整个线程和异步的工作,但是由于某种原因,它使我的程序变慢了(在模拟器中,设备现在不可用),我是否做了任何可能导致这种情况的事情,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();
        }
    }
}
私有类TeamSearchTask扩展了AsyncTask{
charnfo序列;
字符串[]匹配;
字符串[]数据;
字符串teamNum;
对话加载;
受保护的void onPreExecute()
{
//显示“加载”对话框
加载=新建ProgressDialog(SapphireAlliance.this);
正在加载.setMessage(“正在加载,请稍候…”);
loading.show();
}
受保护的字符串doInBackground(字符串…组号)
{
尝试
{
//团队信息------------------------------------------------------------------------------------
teamNum=teamNumber[0];
//团队数据数组
data=APIconnection.getTeams(teamNum,“”);
//显示基本团队信息
nfo=(“\n正规团队名称:\n”+数据[1]+
“\n\n位置:\n”+数据[3]+“,“+数据[4]+”,“+数据[5]+
“\n\n起始年份:\n”+数据[6]+
“\n\n机器人名称:\n”+数据[7]+
“\n\n网站:\n”+数据[8]+“\n\n\n\n\n\n\n\n\n”;
//配对档案--------------------------------------------------------------------------------------
字符串[]事件=APIconnection.getEventIdsByYear(year1);
ArrayList matches=新的ArrayList();

对于(int i=0;i可能是您的线程优先级设置得不太高。我记得默认值相当低。但是,对于您正在做的事情,它不应该超过几秒钟。我认为真正的问题在于APIconnection连接到网络并做一些需要很长时间的事情。特别是,
对于执行事件获取的循环,如果每个调用打开一个新的套接字,那么将要做大量的工作,假设这是第一次匹配。:P

我也有同样的问题,只做一个简单的DES解密的文件拷贝……整个过程在UI线程上运行了几秒钟,但当移动到异步任务时,它现在是需要几分钟才能完成。难以置信。

是的!这是第一次匹配!嗯。我以为异步任务有办法做到这一点,但我想没有。我认为你真正的问题是如何连接到数据源或如何解析XML。对于这种操作,主UI线程上的16秒似乎有点慢。可能吗e因为我使用的是:javax.xml.parsers.DocumentBuilderFactory;javax.xml.parsers.DocumentBuilder;org.xml.sax.SAXException;org.xml.sax.SAXParseException;而不是android.sax?您使用的API的细节通常并不重要。算法的流程更可能是问题所在。没有具体的合作伙伴关系de,我帮不了你多少忙。我建议你看看你打了多少网络电话,占用了多少内存,以及你的XML处理例程的流程。如果你的处理是真正的线性时间,那么你就没事了。但听起来你忽略了一些瓶颈。试着用它来分析你的代码。好的,我同意e检查,我的一些问题的原因是重复执行任务(出于某种原因,它执行了3次)现在加载时间缩短到30秒(仍然很多,但比以前快了很多,响应速度也快了很多)我无法让traceview工作,但我不需要它(至少现在)。