Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Re: Service para consumo de WebService com grande volume de dados/Verificação de atualizações

Suelen acho que você tinha razão quanto ao xml.


Antes estava ficando muito lento ambos os lados, tanto no retorno como na gravação no smartphone.
Agora estou vendo que há lentidão também no recebimento dos dados.

Estou vendo como posso converter meus métodos de retorno DataSet para JSON.

On Friday, April 26, 2013 11:49:45 AM UTC-3, Suelen GC wrote:
Então, eu desenvolvi um app aqui na empresa e também precisamos fazer algumas importações... eu disparo mais de uma Async para isso.

--

Suelen Goularte Carvalho
suelengc.com.br | @suelengc
(11) 99336.7069






2013/4/26 Guilherme Bernardi <gui.ber...@gmail.com>
Suelen bom dia,

Obrigado pela atenção.

Então o serviço demora um certo tempo para retornar.

Eu não entendo muito bem de web service, eu fiz um web service utilizando vb.net onde eu retorno um DataSet.
No navegador ele é exibido no padrão Microsoft lá do xml

E quanto a AsyncTask eu tenho grandes dúvidas nisso.

Eu coloquei todos os métodos de importação dentro de apenas 1 AsyncTask e ela vai executando uma a uma, isso é correto?

Obrigado desde já.

On Friday, April 26, 2013 11:24:16 AM UTC-3, Suelen GC wrote:
Guilherme, você sabe quanto tempo seu serviço está levando para te retornar as informações? Pelo que entendi, você está fazendo uma requisição que te retorna os 2k de registros, quanto tempo isso leva. 

Uma recomendação, não sei o formato dos dados que seu serviço retorna (para você estar usando SOAPObject deve ser XML), mas se puder, opte por JSON, ele é bem menos verboso que xml, resultando em menos bits a serem trafegados, logo, mais rápido. Existe a biblioteca GSon do Google que é extremamente fácil serializar/desserializar objetos para/de JSON. 

Bem, depois que souber quanto tempo seu serviço para retornar os dados, verifique quanto tempo está levando a importação destes dados dentro do app. Assim, você saberá onde você deve melhorar (serviço ou app android) e qual +/- o tempo mínimo a esperar desta importação (caso você decida melhorar só um deles)

Outra ideia é separar em várias Threads, seja com AsyncTask, Service, IntentService, etc, como você mesmo comentou acima.

No mais, achei a Thread bem interessante ;)

--

Suelen Goularte Carvalho
suelengc.com.br | @suelengc


2013/4/26 Guilherme Bernardi <gui.ber...@gmail.com>
Pessoal.

Meu processo de Importação acabou ficando assim, mas ainda continuo achando lento. Onde pode estar causando esta lentidão?

DataBase = new DadosBD(Singleton.getContextoAplicacao());
SoapObject request = new SoapObject(this.getWsNameSpace(), this.getWsNomeMetodo());
request.addProperty("representante", WsRepresentante);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.implicitTypes = false;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(this.getWsUrl());
httpTransport.call(this.getWsNameSpace() + "" + this.getWsNomeMetodo(), envelope);
SoapObject result = (SoapObject) envelope.getResponse();
if (result != null) {
int resultCount = result.getPropertyCount();
if(resultCount > 0){
SoapObject objResult = new SoapObject();
SoapObject objSoap = new SoapObject();
objResult = (SoapObject) result.getProperty(1);
if(objResult.getPropertyCount() > 0){
objSoap = (SoapObject) objResult.getProperty(0);
int propertyResultCount = objSoap.getPropertyCount();
               
               if (propertyResultCount > 0){

                DataBase.BeginTransaction();
               
                SQLiteStatement stmtInsert = DataBase.getDataBase().compileStatement(DataBase.ExecInsertBuilder(Tabela, TabelaColunaComposta));
                SQLiteStatement stmtSelect = DataBase.getDataBase().compileStatement(DataBase.ExecSelectBuilder(false, Tabela, TabelaSelecaoArgumentos, TabelaSelecao, TabelaGroupBy, TabelaHaving, TabelaOrderBy, "1"));
                SQLiteStatement stmtUpdate = DataBase.getDataBase().compileStatement(DataBase.ExecUpdateBuilder(Tabela, TabelaColunaComposta, TabelaWhereArgumentos));
               
                this.Dados = new ContentValues();
               
                for (int currentProperty = 0; currentProperty < propertyResultCount; currentProperty++) {
           
                       SoapObject obj = (SoapObject) objSoap.getProperty(currentProperty);
                       int attributeResultCount = obj.getPropertyCount();
                       
                       for(int index = 0; index < attributeResultCount; index++){
                       
                        PropertyInfo pi = new PropertyInfo();
                        obj.getPropertyInfo(index, pi);
                        stmtInsert.bindString(index + 1, ((pi.getValue().toString().equals("anyType{}")?(""):(pi.getValue().toString()))));
                        stmtUpdate.bindString(index + 1, ((pi.getValue().toString().equals("anyType{}")?(""):(pi.getValue().toString()))));
                        this.Dados.put(pi.name.toString(), ((pi.getValue().toString().equals("anyType{}")?(""):(pi.getValue().toString()))));
                       }
                       
                       for (int i = 0; i < this.getCamposPK().length; i++) {
                        stmtSelect.bindString(i + 1, this.Dados.get(CamposPK[i].toString()).toString());
                       }
                       
                       if(!(stmtSelect.simpleQueryForLong()==1)){
                        stmtInsert.executeInsert();
                       }else{
                        stmtUpdate.execute();
                       }
                   }
                DataBase.SetTransaction();
                DataBase.EndTransaction();
               }
}
}
}

On Monday, April 15, 2013 5:31:54 PM UTC-3, Guilherme Bernardi wrote:
Pessoal, boa tarde.

Em outros tópicos, comentei que estava com um problema de controle e performance de um consumo de um webservice, que retorna grande volume de dados, bastante gente sugeriu utilizar Service.

Estou estudando e olhando alguns conteúdos na internet, mas tenho algumas dúvidas.

Por exemplo no meu caso eu tenho um aplicativo, que quando o usuário baixa ele vai com pouquíssimos dados praticamente só o que é dado fixo. E as demais tabelas são preenchidas no processo de importação de dados, que chama diversos métodos em um webservice e vai preenchendo as tabelas.
Eu estava utilizando uma AsyncTask setava o cancelamento como false e etc. E exibia um dialog pedindo para o usuário aguardar.

Pelo que notei nos exemplos o pessoal utiliza o Service para processos que ficam rodando em paralelo e não exibem feedback para o usuário, no meu caso eu gostaria realmente de manter o usuário aguardando a importação.

Neste caso eu posso dar o start em meu Service dentro de uma AsyncTask?

Outra coisa se o usuário fechar o aplicativo o Service para de funcionar ou continua rodando?

Uma outra dúvida também, eu estava pensando como fazer um processo que por exemplo tentasse verificar de 30 em 30 minutos ou de 1 hora em 1 hora se há atualizações disponíveis no webservice, chamando um método simples e caso houvesse ai eu poderia gerar uma notificação para o usuário.
Neste caso eu também posso implementar através de um Service e fazer esse tipo de implementação nele?

Isso pode prejudicar a performance do aplicativo ou do aparelho?

Obrigado desde já.


--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário