Pergunta

Estou editando o código de um aplicativo Android que está fazendo chamadas GPS em um serviço.LocalizaçãoListener.Ele também usa ServiceConnection

Em algumas visualizações, o dispositivo decide que meu aplicativo está demorando muito para responder, e que o usuário pode "forçar fechar" ou "esperar".Antes que este pop-up apareça, o aplicativo ainda é utilizável pelo usuário, eles podem rolar, deslizar, pressionar os botões etc.

Eu só estou assumindo que isso está relacionado ao serviço GPS, pois está sendo executado sempre que esse problema acontecer.

Eu ouvi dizer que esse problema tem a ver com um segmento em execução no uithread, em vez de um fio de fundo.Mas eu tinha certeza de que os serviços funcionam de forma assíncrona no fio de fundo.

insight apreciado

Foi útil?

Solução

Usar um serviço não desova necessariamente um novo segmento, a chamada de serviço é executada no tópico do chamador.Do serviço de API do Android Doc em: "Observe que os serviços, como outros objetos de aplicativos, executam na linha principal do processo de hospedagem ..".

Você pode especificar o serviço para ser executado em um processo diferente, mas a melhor prática é desovar um novo segmento no serviço.

Mais no serviço Android em: http://developer.android.com/reference/android/app/service.html

Outras dicas

Eu recomendo totalmente que você estenda asynctask, permite o uso adequado e fácil do fio da interface do usuário.Permite realizar operações de fundo e publicar resultados no thread UI sem ter que manipular fios e / ou manipuladores.Você pode querer fazer toda a computação no método do Doinbackground.btw Força Força ou espera é um comportamento clássico para esse tipo de problema. Boa sorte !!!

Processamento em um serviço ainda pode causar sua aplicação.

A solução que você deve estar olhando para a implementação é executar qualquer lógica que possa atirar em sua atividade em um encadeamento separado.Isso inclui coisas como: atualizações / inserções do banco de dados, comunicação de rede e quaisquer outras peças de longo código de execução.

O AsyncTask é um método conveniente para isso, pois você pode manipular a interface do usuário no OnPreeXecute e nas funções ONPOSTEXECUTE.

Você pode implementar um assíncrão diretamente em seu serviço como uma subclasse.

Hoepfally isso ajuda! Aplausos

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