Alguém pode dar um exemplo simples de atualizar um campo de texto a cada segundo mais ou menos?
Quero fazer uma bola voadora e preciso calcular / atualizar as coordenadas da bola a cada segundo, é por isso que preciso de um temporizador.
Eu não entendo nada daqui .
Respostas:
ok, já que isso não foi esclarecido, ainda existem três maneiras simples de lidar com isso. Abaixo está um exemplo mostrando todos os 3 e, na parte inferior, um exemplo mostrando apenas o método que acredito ser preferível. Lembre-se também de limpar suas tarefas no onPause, salvando o estado, se necessário.
o principal a lembrar é que a interface do usuário só pode ser modificada a partir do thread principal da interface do usuário; portanto, use um manipulador ou atividade.runOnUIThread (Runnable r);
Aqui está o que considero o método preferido.
fonte
É simples! Você cria um novo timer.
Então você estende a tarefa do timer
E adicione a nova tarefa ao Timer com algum intervalo de atualização
Isenção de responsabilidade: Esta não é a solução ideal. Esta é a solução usando a classe Timer (conforme solicitado pelo OP). No Android SDK, é recomendável usar a classe Handler (há um exemplo na resposta aceita).
fonte
Se você também precisar executar seu código no thread da interface do usuário (e não no timer), consulte o blog: http://steve.odyfamily.com/?p=12
fonte
Se você quiser apenas agendar uma contagem regressiva até um momento no futuro com notificações regulares em intervalos ao longo do caminho, poderá usar a classe CountDownTimer que está disponível desde o nível 1 da API.
fonte
SS:MiMi
? ObrigadoEste é um código simples para um timer:
fonte
Eu acho que você pode fazê-lo da maneira Rx, como:
E cancele isto como:
Rx Timer http://reactivex.io/documentation/operators/timer.html
fonte
Como essa pergunta ainda está atraindo muitos usuários da pesquisa do Google (sobre o temporizador do Android), gostaria de inserir minhas duas moedas.
Primeiro, a classe Timer será descontinuada no Java 9 (leia a resposta aceita) .
A maneira oficial sugerida é usar o ScheduledThreadPoolExecutor, que é mais eficaz e rico em recursos que pode agendar adicionalmente comandos para serem executados após um determinado atraso ou para serem executados periodicamente. Além disso, oferece flexibilidade e recursos adicionais do ThreadPoolExecutor.
Aqui está um exemplo do uso de funcionalidades simples.
Crie serviço executor:
Basta agendar sua execução:
Agora você pode usar
future
para cancelar a tarefa ou verificar se é feita, por exemplo:Espero que você ache isso útil para criar tarefas no Android.
Exemplo completo:
fonte
Estou surpreso que não haja resposta que mencionaria solução com RxJava2 . É realmente simples e fornece uma maneira fácil de configurar o temporizador no Android.
Primeiro, você precisa configurar a dependência do Gradle, se ainda não o fez:
(substitua
x
ey
pelo número da versão atual )Como temos apenas uma tarefa simples, NÃO REPETIDORA , podemos usar o
Completable
objeto:Para REPETIR TAREFA , você pode usar de
Observable
maneira semelhante:Schedulers.computation()
garante que nosso timer esteja em execução no thread de segundo plano e.observeOn(AndroidSchedulers.mainThread())
significa que o código executado após o término do cronômetro será realizado no encadeamento principal.Para evitar vazamentos indesejados de memória, cancele a inscrição quando a Atividade / Fragmento for destruída.
fonte
Subscription
retornado.subscribe()
na variável e chamesubscription.unsubscribe()
quando quiser parar o cronômetro.Ele é uma solução mais simples, funciona bem no meu aplicativo.
fonte
Você deseja que suas atualizações de interface do usuário ocorram no encadeamento de interface de usuário já existente.
A melhor maneira é usar um manipulador que use postDelayed para executar um Runnable após um atraso (cada execução agendará a próxima); limpe o retorno de chamada com removeCallbacks.
Você já está procurando o lugar certo, então olhe novamente, talvez esclareça por que esse exemplo de código não é o que você deseja. (Consulte também o artigo idêntico em Atualizando a interface do usuário a partir de um timer ).
fonte
Aqui está uma maneira simples e confiável ...
Coloque o seguinte código em sua Atividade, e o método tick () será chamado a cada segundo no thread da interface do usuário enquanto sua atividade estiver no estado "resumido". Obviamente, você pode alterar o método tick () para fazer o que quiser ou para ser chamado com mais ou menos frequência.
Para os interessados, o código "_h0 = _handler" é necessário para evitar a execução simultânea de dois cronômetros, se sua atividade for pausada e retomada dentro do período de tick.
fonte
_h0
abordagem, em vez deremoveCallbacks
nosonPause
, como toda a gente?Você também pode usar um animador para isso:
fonte
Você precisa criar um thread para lidar com o loop de atualização e usá-lo para atualizar a área de texto. A parte complicada, porém, é que apenas o thread principal pode realmente modificar a interface do usuário, portanto o thread do loop de atualização precisa sinalizar o thread principal para fazer a atualização. Isso é feito usando um manipulador.
Confira este link: http://developer.android.com/guide/topics/ui/dialogs.html# Clique na seção "Exemplo de ProgressDialog de exemplo com um segundo thread". É um exemplo exatamente do que você precisa fazer, exceto com uma caixa de diálogo de progresso em vez de um campo de texto.
fonte
fonte
Se alguém estiver interessado, comecei a brincar com a criação de um objeto padrão para executar em um segmento da interface do usuário de atividades. Parece funcionar bem. Comentários bem-vindos. Eu adoraria que isso estivesse disponível no designer de layout como um componente para arrastar para uma atividade. Não posso acreditar que algo assim ainda não exista.
Na atividade, tenho este onStart:
fonte
.xml
fonte
Se você já tem tempo delta.
fonte
Afastei o Timer e fiz dele uma aula separada:
E extrair a ação principal da
Timer
classe comoE eu usei assim:
Espero que isso ajude
fonte
Eu uso desta maneira:
então abaixo do onCreate
é uma maneira fácil de resolver esse problema.
fonte
Para quem não pode confiar no cronômetro , criei uma classe de utilidade com uma das sugestões:
para usar ... basta fazer:
.....
fonte