2013-06-12 2 views
0

Возможно ли это? расчеты в моих функциях потребляют много процессорного времени. Я должен использовать индикатор выполнения.Возврат промежуточного результата вычислений функции в java

public int func() 
{ 

for (int i = 0; i < 10 ; i ++) 
{ 
    return i;//i need 10 returns of this for broadcast or progressbar. 
} 
} 
+0

В вашем примере вы всегда будете возвращать 0. – Maroun

+0

Нет, это невозможно. 'return' передает управление методу, который называется текущим. –

+1

Вы ищете C# 'yield return', которую Java не поддерживает. Рассмотрите возможность использования 'AsyncTask'. – SLaks

ответ

7

Вы также можете использовать AsyncTask для расчетов за вашим графическим интерфейсом. И используйте onProgressUpdate() для отправки прогресса. И используйте onPostExecute(), чтобы отправить окончательный результат.

Если я объединил ваш пример в примере разработки Android, это будет выглядеть так.

new DoMyCalculations(1000);  

private class DoMyCalculations extends AsyncTask<Integer, Integer, Integer> { 
    protected Long doInBackground(Integer... params) { 
     int sum = 0; 
     for (int i = 0; i < params; i++) { 
      sum += i; 
      publishProgress(i); 
     } 
     return sum; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     setProgressPercent(progress); //a function in your GUI which shows progress 
    } 

    protected void onPostExecute(Long result) { 
     showDialog("Sum is: " + result);//a function in your GUI which shows results 
    } 
} 
+0

Я знаю об этом. Но теперь у меня очень большая логика в другой функции, которая очень сложна для вставки async-задачи. – Vyacheslav

+2

Эта огромная логика не должна быть в вашем графическом интерфейсе. Если он существует в других созданных классах, вы можете попытаться реализовать в них Asynctask. Тем не менее, это также правильный ответ на ваш вопрос, поэтому, пожалуйста, примите его ^^ – Timmetje

+0

, но как я могу взаимодействовать с AsyncTask в другом классе и в панели прогресса в основном классе? – Vyacheslav

1

Android обеспечивает класс AsyncTask для такого рода вещей. Посмотрите, в частности, на onProgressUpdate.

+0

Спасибо. Но я ищу другой путь. – Vyacheslav

Смежные вопросы