No AsyncTask Como passar dados de doInBackground () para a interface principal "instantaneamente" e não após cada loop? (BufferedReader)

EDIT1:

Alterei o código para que a atualização fosse feita dentro do loop while. NO ENTANTO, SEM MUDANÇA. MOSTRADO ISTO NO CÓDIGO ABAIXO. Além disso, removeu outras linhas irrelevantes em onProgressUpdate (). MOSTRADO NO CÓDIGO ABAIXO.

Por favor, responda como você ensinaria um amador. Estou passando dados de doInBackground () para a interface principal atualmente. Funciona. No entanto, é muito lento. Quero exibir resultados "instantâneos" e não depois que o loop for concluído. É assim que o código é escrito, no entanto, em termos de desempenho, se o loop for executado por 100 vezes, eu só recebo os resultados AT uma vez após a conclusão de 100 iterações. Isso é estranho. Quero resultados após cada iteração. Como conseguir isso. Atualmente;

    protected Void doInBackground(Void... params) 
        {

            try {
    //bunch of code
for(int k=x1[3];k<=x2[3];k++)
            {
//Process process = execute it;
    reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                    int j;
                    char[] buffer = new char[4096];
                    StringBuffer output = new StringBuffer();
                    while ((j = reader.read(buffer)) > 0)
                    {
                    output.append(buffer, 0, j); 
                    }
                    str = output.toString();
                    Log.d("1:STR VALUE", str);
                    publishProgress(str);
                    reader.close();  

    } //FOR loop ends
                 }}
    protected void onProgressUpdate(String... values) {
            results1.append(str);
            results1.append("\n");
            super.onProgressUpdate(values);
        }

Como modificar a saída StringBuffer para que eu obtenha resultados instantâneos depois que o leitor obtém os dados? obrigado

questionAnswers(1)

yourAnswerToTheQuestion