Есть ли способ запустить обработчик внутри цикла? У меня есть этот код, но не работает, так как не ждать цикла, но выполняет код правильный путь:Android postDelayed Handler Inside for For Loop?
final Handler handler = new Handler();
final Runnable runnable = new Runnable() {
public void run() {
// need to do tasks on the UI thread
Log.d(TAG, "runn test");
//
for (int i = 1; i < 6; i++) {
handler.postDelayed(this, 5000);
}
}
};
// trigger first time
handler.postDelayed(runnable, 0);
Конечно, когда я двигаю пост замедленное вне работы цикла, но это не перебирать, ни выполнить времена мне нужно:
final Handler handler = new Handler();
final Runnable runnable = new Runnable() {
public void run() {
// need to do tasks on the UI thread
Log.d(TAG, "runn test");
//
for (int i = 1; i < 6; i++) {
}
// works great! but it does not do what we need
handler.postDelayed(this, 5000);
}
};
// trigger first time
handler.postDelayed(runnable, 0);
РЕШЕНИЕ НАЙДЕНО:
мне нужно использовать asyntask вместе с Thread.sleep (5000) в методе doInBackground:
class ExecuteAsyncTask extends AsyncTask<Object, Void, String> {
//
protected String doInBackground(Object... task_idx) {
//
String param = (String) task_idx[0];
//
Log.d(TAG, "xxx - iter value started task idx: " + param);
// stop
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//
Log.d(TAG, "xxx - iter value done " + param);
return " done for task idx: " + param;
}
//
protected void onPostExecute(String result) {
Log.d(TAG, "xxx - task executed update ui controls: " + result);
}
}
for(int i = 0; i < 6; i ++){
//
new ExecuteAsyncTask().execute(String.valueOf(i));
}
, если вы звоните 'postDelayed' N раз' Runnable' будет работать N раз, не правда ли то, что вы хотите? – pskink
Да, но он не ждет и сразу вызывает код, который мне не нужен –
измените '5000' на' 5000 + i * 1000', поэтому первый «Runnable» будет запущен через 5 секунд, второй после 6 сек и т. д. ... 7, 8, 9, ... – pskink