Асинхронная задача Android замедляет поток пользовательского интерфейса.

Я новичок в разработке приложений для Android, и у меня возникла проблема с асинхронными задачами. Итак, я пытаюсь создать приложение для построения графиков ЭКГ, которое выполняет некоторую фоновую обработку во время построения графика.

Я определил следующую асинхронную задачу —

private class Erosion extends AsyncTask <Void,Void,Void> {


    @Override
    protected Void doInBackground(Void...unused ) {

        int i,tempIndex;
        double[] tempArray = new double[13];
        double min = ecgSamples[ecgSampleForErosionIndex] - gArray[0]; 
        while (ecgIncoming)
        {
            if (ecgSampleForErosionIndex > 179999)
            {
                ecgSampleForErosionIndex = 0; 
            }

            for(i= 0;i<13;i++)
            {
                tempIndex = ecgSampleForErosionIndex + i; 
                if (tempIndex > 179999)
                {
                    tempIndex =  (ecgSampleForErosionIndex + i) - 180000;
                }
                tempArray[i] = ecgSamples[tempIndex] - gArray[i];
                if (tempArray[i] < min)
                {
                    min = tempArray[i];
                }

            }

            //min needs to be stored in the erosionFirst Array

            if (erosionFirstArrayIndex > 179999)
            {
                erosionFirstArrayIndex = 0; 
            }


            ecgErosion[erosionFirstArrayIndex] = min; 
            erosionFirstArrayIndex++;
            ecgSampleForErosionIndex++;


        }
        return null;


    }

    } //End of Async Task  

Итак, все, что я пытаюсь сделать, это изменить содержимое определенного массива в асинхронной задаче — мне не нужно обновлять пользовательский интерфейс (по крайней мере, пока)

Однако, когда я запускаю эту асинхронную задачу, мой график ЭКГ замедляется и становится прерывистым. Когда я комментирую "new Erosion().execute();" часть кода, где я запускаю асинхронную задачу, график снова становится нормальным.

Разве асинхронная задача не должна быть в отдельном потоке и не влиять на то, как все происходит в моем потоке пользовательского интерфейса? Что я делаю неправильно?

6
задан stu90 9 March 2012 в 18:52
поделиться