O ProgressBar não redefine para "0" ao abrir pela segunda vez

Em um aplicativo Android, eu executo uma tarefa em um thread separado. Enquanto o thread está em execução, ele atualiza uma barra de progresso na janela principal para informar ao usuário o que está acontecendo. O problema é que, se um usuário iniciar o thread pela segunda vez, a barra de progresso não será redefinida. Ele ficará 100% sem fazer nada.

Toda a fonte édisponível no github. Como exemplo, considere oBackupThread eJsonBackup (a classe principal). Observe que "RestoreThread" mostra o mesmo comportamento, mas presumo que nos dois casos o problema é idêntico.

Em uma rápida caminhada através de:

Em torno delinha 300 em JsonBackup.java, Abro um novo ProgressDialog. Como é uma nova instância, presumo que tudo foi inicializado corretamente. Na minha cópia de trabalho atual, adicionei uma linha configurando o progresso para "0", mas isso não mudou nada. No mesmo bloco, eu crio o thread de backup e o executo.

O próximo pedaço de código de interesse é o momento em que o thread comunica seu progresso de volta ao aplicativo principal. Isso acontece em torno delinha 185 de BackupThread.java.

A mensagem é tratada emlinha 80 de JsonBackup.java que atualizará a barra de progresso.

Até agora, o passo a passo do código. Uma coisa que me impressionou ao escrever isso élinha 87 de JsonBackup.java. Eu acho que seria melhor se o thread enviasse uma mensagem diferente, declarando explicitamente que foi feito. Mas presumo que este não seja o problema real aqui. Digo isso porque a caixa de diálogo de progresso se despede adequadamente quando atinge 100%.

Portanto, se tudo isso for executado uma vez, tudo funcionará conforme o esperado. Agora suponha que o usuário saia do aplicativo, mas o sistema operacional decida deixá-lo carregado na memória. Posteriormente, o usuário volta e deseja criar um novo backup. Em seguida, o aplicativo não funcionará, pois o progresso é interrompido em 100%. Se você matar o aplicativo, ele será completamente descarregado e funcionará novamente. Portanto, suponho que alguma instância de objeto ainda esteja na memória e tenha um estado impuro ao executar novamente. Mas para a minha vida, não consigo encontrar o que está acontecendo. Como tangente, devo acrescentar: Além dos tutoriais do Bloco de notas, este é meu primeiro aplicativo para Android e bla di blá blá ...

O que estou perdendo aqui...?

questionAnswers(2)

yourAnswerToTheQuestion