Вы также можете использовать 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. – Maroun
Нет, это невозможно. 'return' передает управление методу, который называется текущим. –
Вы ищете C# 'yield return', которую Java не поддерживает. Рассмотрите возможность использования 'AsyncTask'. – SLaks