matar um tópico após retomar a atividade principal?
-
28-10-2019 - |
Pergunta
Tenho este problema no android.eu tenho uma atividade principal que abre um tópico com isso
Runnable work = new Runnable() {
public void run() {
while (kill) {
try {
Thread.sleep(5000);
connect();
} catch (InterruptedException ex) {
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
};
kill é um booleano público em MainActivity. O que posso fazer para salvar o tópico para que, quando eu retome a atividade, eu ainda possa encerrá-lo?
Solução
Acho que você deseja fazer algo mais próximo do que esta solução propõe.
No entanto, se você realmente deseja continuar fazendo isso em um Thread
, sugiro que você estenda uma nova classe de Thread
e adicione um método chamado killMe()
.Isso irá modificar o (agora privado ) sinalizador booleano kill
.Então, em seu onRetainNonConfigurationInstance()
, você pode retornar este Thread
e pode recuperá-lo novamente em onResume
.Se você retornar e a atividade não tiver sido eliminada, tudo bem, você pode apenas chamar killMe()
no Thread
existente.
Exemplo:
@Override
public Object onRetainNonConfigurationInstance() {
return thread;
}
Outras dicas
Por que você deseja encerrar o tópico do currículo?
Por que não iniciar o tópico na parte do currículo e, em seguida, colocar um bloco final para lidar com o fato de que o connect()
foi interrompido e, quando ele começar novamente, você só precisa se reconectar e fazer a operação.
No caso de dispositivos móveis, sua melhor aposta é marcar algum armazenamento persistente onde você estiver, de forma que, se for interrompido, você possa continuar quando o Activity
for iniciado novamente.
Você tem uma grande possibilidade de ser interrompido, então planeje isso.
O tópico pode ser eliminado pelo sistema operacional, portanto, não há nada para salvar e eliminar mais tarde.
Se você realmente precisa fazer algo assim, inicie um RemoteService
, já que ele será executado em um processo diferente do seu Activity
e é mais provável que permaneça.
Você pode querer olhar para esta questão: