Asynctask занимает смешное количество времени - PullRequest
1 голос
/ 12 октября 2010

Моя проблема в том, что раньше у меня была программа, работающая без многопоточности, и обработка информации заняла много времени (16 секунд, чтобы получить данные XML и отобразить их). Теперь я полностью отключил многопоточность и асинхронность, но по какой-то причине он делает мою программу SLOWER (в эмуляторе устройство сейчас недоступно), есть ли что-то, что я мог сделать, что могло бы вызвать Поток пользовательского интерфейса в порядке, но мой асинхронный поток занимает полторы минуты для выполнения. (когда он у меня в потоке пользовательского интерфейса занимал всего 16 секунд, но зависал в потоке пользовательского интерфейса)

Вот код моей ветки, он находится внутри основного класса:

    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 голосов
/ 06 октября 2011

У меня та же проблема, я не делаю ничего, кроме копирования файла с простым дешифрованием DES ... все это выполнялось за несколько секунд в потоке пользовательского интерфейса, но при перемещении в ASYNCTASK теперь требуется МИНУТ для выполнения,Невероятно.

0 голосов
/ 12 октября 2010

Возможно, приоритет вашего потока установлен не очень высоко.Я помню, что по умолчанию довольно низкий.Однако для того, что вы делаете, это не должно занимать больше пары секунд.Я думаю, что настоящая проблема заключается в подключении API к сети и выполнении чего-то, что занимает много времени.В частности, тот цикл for, который выполняет выборку событий, будет выполнять большую работу, если каждый вызов открывает новый сокет, предполагая, что это для первых совпадений.: P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...