Вопрос

Мне нужно отобразить продолжительность нескольких моих действий в приложении.Таймер запускается при запуске одного из видов деятельности.

  • Должен ли я использовать сервис для таймера?
  • Является ли это лучшим способом ?
  • Или я должен начать поток с одного из действий?
Это было полезно?

Решение

Я думаю, что в случае использования, который вы описываете, было бы лучше всего Магазин временные метки (см. Хранение данных) и вычислить дельты для использования графического интерфейса.Если вам нужно отобразить часы реального времени в одном из ваших действий, вы можете создать отдельный поток в этом действии просто для обновления часов.

Другие советы

Что ж, в зависимости от того, сколько работы с интерфейсом вам нужно для отображения вашего прогресса, я бы запустил поток в рамках действия, а затем создал таймер, который проверяет статус выполнения потока и обновляет интерфейс по мере необходимости.Сервисы хороши для фоновых задач, которые не требуют большого количества уведомлений / обновлений интерфейса.

Вот пример из проекта, над которым я сейчас работаю (UpdateListRunnable просто вызывает "notifyDataSetChanged()" в моем адаптере списка.Я делаю это несколько раз в коде, поэтому инкапсулировал его в класс.Кроме того, updateHandler - это просто обычный экземпляр обработчика):

@Override
public void run() {
    Timer updateProgressTimer = null;
    UpdateItem currentItem = null;

    for(int i = 0; i < items.size(); i++) {
        currentItemIndex = i;
        currentItem = items.get(i);

        if (currentItem.isSelected() == true) {
            updateProgressTimer = new Timer();

            updateProgressTimer.scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
                    updateHandler.post(new UpdateListRunnable());
                }
            }, 0, 2000); // check every 2 seconds

            lookupDb.downloadUpdate(currentItem);

            currentItem.setUpToDate(true);
            currentItem.setStatusCode(UpdateItem.UP_TO_DATE);
            currentItem.setProgress(0);
            updateProgressTimer.cancel();

            updateHandler.post(new UpdateListRunnable());
        } // end if its the database we are hosting on our internal server
    } // end for loop through update items

    currentItemIndex = -1;
} // end updateThread run
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top