Pergunta

Eu tenho uma classe que busca dados em resposta às pressões de botão na atividade principal. Infelizmente, continuo encontrando problemas porque essa classe não é uma atividade ou um serviço. Por exemplo, sem um contexto, não posso traduzir um ID de recurso em uma string:

getString(R.string.example_string); // Doesn't work

Devo transformar essa aula em um serviço e fazer com que a atividade principal pare a classe quando estiver fechada? Devo passar o contexto da atividade para esta classe como essa?

MyClass c = new MyClass(this);

Ou existe uma maneira melhor de lidar com esse problema?

Esse problema também surge quando tento enviar uma torrada desta classe.

Atualizar: Erich e Janusz me apontaram na direção do AsyncTask A classe que funciona perfeitamente, exceto que cria um novo tópico e nunca mata esse tópico. Isso significa que, sempre, o usuário pressiona um botão, outro thread é adicionado e os antigos apenas sentam lá.

Foi útil?

Solução

Se você tem uma ação de fundo cujo ciclo de vida é dissociado de sua atividade, eu usaria um Service. Nesse caso, o Service terá seu próprio Context, então você não precisará passar por isso. Se, no entanto, precisar executar uma ação em segundo plano em resposta a um evento da interface do usuário (e opcionalmente postar os resultados de volta no tópico da interface do usuário), eu recomendaria que você use um AsyncTask.

Outras dicas

Eu concordo com Erich, se você só tem algo pequeno, como postar uma alteração em um back -end da web ou carregar algo da memória do telefone para mostrá -lo na tela, use um Tarefa assíncrona. Se a tarefa sairá muito "rápida" (alguns segundos), você poderá fazer uma aula anônima dentro de sua atividade. Isso permitirá que você use uma referência implícita à atividade externa dentro da tarefa e você poderá obter seu contexto a partir daí.

Se a tarefa estiver em execução por mais tempo, você poderá passar o contexto. Se você estiver passando pelo contexto, tente não passar por isso da atividade, use isso.getApplicationContext (), isso minimizará o número de referências à sua atividade e permitirá que o coletor de lixo limpe corretamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top