Pergunta

Eu preciso exibir uma duração de tempo em algumas das minhas atividades dentro do aplicativo. O temporizador começa quando um dos começos de atividade.

  • Devo serviço de uso para o temporizador?
  • Esta é a melhor maneira?
  • Ou devo começar a rosca de um dos Atividade?
Foi útil?

Solução

Eu acho que no caso de uso que você está descrevendo seria melhor para Loja selos de tempo (ver Data Storage ) e calcular os deltas para uso GUI. Se você precisar exibir um relógio de tempo real em uma das suas atividades, você pode criar um segmento separado em que a atividade apenas para atualizar o relógio.

Outras dicas

Bem, dependendo da quantidade de trabalho interface que você precisa exibir seu progresso, gostaria de iniciar uma discussão dentro da atividade e, em seguida, criar um timer que verifica o status do progresso fio e atualizações da interface conforme necessário. Serviços são bons para tarefas de fundo que não exigem um monte de interface de notificação / atualizações.

Aqui está um exemplo de um projeto que estou trabalhando atualmente em (UpdateListRunnable apenas chama "notifyDataSetChanged ()" na minha lista adaptador. Eu faço isso várias vezes no código então eu encapsulado em uma classe. Além disso, updateHandler é apenas uma instância Handler regular):

@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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top