Problemas ao mudar estado da aplicação

8 respostas
F

Estu criando um timer para Android, to no inicio, mas to com um belo problema, quando preciso sair da aplicação ou até mesmo muda a orientação da tela, o contador de tempo é reiniciado.
Como posso fazer para que ele continue rodando(sem reiniciar) mesmo depois mudar a orientação da tela(simplesmente virando o celular)
Acho q preciso usar o metodo onResume do Android ou preciso usar um Handler, não faço ideia de como posso começar.

Ai esta o codigo

import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.widget.TextView;

public class Timer extends Activity {
	TextView tv; // textview to display the countdown

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		tv = new TextView(this);
		this.setContentView(tv);
		// 5000 is the starting number (in milliseconds)
		// 1000 is the number to count down each time (in milliseconds)
		MyCount counter = new MyCount(10000000, 100);
		counter.start();
	}

	// countdowntimer is an abstract class, so extend it and fill in methods
	public class MyCount extends CountDownTimer {
		public MyCount(long millisInFuture, long countDownInterval) {
			super(millisInFuture, countDownInterval);
		}

		@Override
			public void onFinish() {
			tv.setText("done!");
		}

		@Override
			public void onTick(long millisUntilFinished) {
			tv.setText("Left: " + millisUntilFinished/1000/60/60 +" hours "+millisUntilFinished/1000/60%60 +" minutes "+ millisUntilFinished/1000%60+" seconds "+millisUntilFinished);
		}
	}
}

8 Respostas

atsuki

Olá, até onde sei sempre que a tela é rotacionada o OnCreate() é chamado. Eu salvo as minhas informações e depois recupero os valores.
Não conheço outra solução.
Boa sorte.

atsuki

Olá, até onde sei sempre que a tela é rotacionada o OnCreate() é chamado. Eu salvo as minhas informações e depois recupero os valores.
Não conheço outra solução.
Boa sorte.

Marky.Vasconcelos

Voce pode implementar os métodos

public Object onRetainNonConfigurationInstance()

e
getLastNonConfigurationInstance

Para guardar o estado durante mudanças de orientação.

F

Os metodos getLastNonConfigurationInstance () e onRetainNonConfigurationInstance estão marcados como deprecated.
A dica do atsuki é até boa, porém eu preciso que o contador rode mesmo quando estiver em background(nao apenas quando o estado da tela mudar), por exemplo:
Ao iniciar o contador ele deve permitir que o usuario atenda uma chamada ou navegue pela internet, e enquanto isso o contador deve continuar rodando em background alterando o tempo.
Devo ter q implementar uma thread ou um handler? Ou sei la, alguma outra coisa, qualquer ajuda é bem vinda

atsuki

Nesse caso você deve estender Service

http://developer.android.com/reference/android/app/Service.html

Marky.Vasconcelos

É… hoje em dia estão depreciados… quando começei a usar não era… vi na documentação hoje isso.

P

Vá no Manifest e marque que não é para recriar a atividade caso a tela seja rotacionada.

Flip_novidade

<android:name=".view.CronometroView" android:configChanges=“keyboardHidden|orientation”>

ta ai…fiz e deu certo

Criado 31 de janeiro de 2012
Ultima resposta 14 de ago. de 2012
Respostas 8
Participantes 5