Tecnologia do Blogger.
RSS

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

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-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