Периодически запускать задачу async в android

56
7

Я хотел запускать асинхронную задачу каждые 1 секунду и обновлять экран каждые 1 секунду.
Как это можно сделать?

Для простого примера я хочу показать текущее время каждые 1 секунду.
Я создаю задачу async и могу рассчитать текущее время обновления интерфейса.
Как задача может выполняться бесконечно?

спросил(а) 2020-04-04T00:31:10+03:00 3 месяца назад
1
Решение
66

Сделайте код следующим образом:

public class MainActivity extends Activity {

TextView mClock;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mClock = (TextView) findViewById(R.id.your_textview_id);
}

private Handler mHandler = new Handler();
private Runnable timerTask = new Runnable() {
@Override
public void run() {
Calendar now = Calendar.getInstance();
mClock.setText(String.format("%02d:%02d:%02d",
now.get(Calendar.HOUR),
now.get(Calendar.MINUTE),
now.get(Calendar.SECOND)) );
mHandler.postDelayed(timerTask,1000);
}
};

@Override
public void onResume() {
super.onResume();
mHandler.post(timerTask);
}

@Override
public void onPause() {
super.onPause();
mHandler.removeCallbacks(timerTask);
}
}

ответил(а) 2020-04-04T00:45:04.188006+03:00 3 месяца назад
66

Задача Asynch не предназначена для повторного запуска. это одна вещь. Вы стреляете в него, обрабатываете вещи и забываете об этом. Для повторной работы попробуйте:

    Запущен исполнитель потока TimerTask Аварийный менеджер

либо сделают эту работу за вас.

ответил(а) 2020-04-04T00:31:10+03:00 3 месяца назад
38

Вы можете использовать Timer и TimerTask.

http://developer.android.com/reference/java/util/Timer.html http://developer.android.com/reference/java/util/TimerTask.html

Документация предполагает использование ScheduledThreadPoolExecutor, но Timer настолько прост, что его все равно стоит рассмотреть.

ответил(а) 2020-04-04T00:31:10+03:00 3 месяца назад
-4

Все эти ответы неверны. Если вы хотите, чтобы что-то произошло в другом потоке, регулярно, используйте freaking Thread. Поместите петлю while наверху и заставьте ее спать до следующего раза, когда вы хотите ее запустить.

ответил(а) 2020-04-04T00:31:10+03:00 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема