Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Executando tarefas em segundo plano

Eu coloquei pra chamar a sincronizacao na segunda activity, no oncreate.
Coloquei um breakpoint no metodo que salva no banco (que eh chamado pelo SincronizacaoTask).
No meu noob entendimento por ser outra thread mesmo a aplicacao parada no break point deveria-se carregar a tela da activity de lancamentos(activity que chamou a SincronizacaoTask), ela so carrega depois que eu libero o break point, por ser outra thread nao deveria carregar a tela independente do break point?


2013/10/7 Douglas Drumond <drumond.douglas@gmail.com>
Ah, se você vai p/ outra activity, você perde o contexto da antiga. No seu caso, como você está usando duas Tasks, pode deixar a SincronizacaoTask na segunda activity e passar parâmetros p/ activity. Ou coloca tudo num service e quando terminar de baixar, chama a segunda activity. O serviço continua rodando e se finaliza quando acabar de salvar no banco.

Outra coisa, publishProgress é para fazer algo na UI enquanto a Task ainda está sendo executada em background, se você já está no onPostExecute não há necessidade disso, já está na thread de UI.
2013/10/6 Paulo Henrique Peres <paulohenriquepo@gmail.com>
No meu caso essa "Atualizacado da UI pro usuario" eh uma nova activity,
sai da pagina de login e vai pra pagina de lancamentos, talvez isso esteja influenciando. SEgue o codigo: 


public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
//chama metodo para realizar login indo ao webservice
}
@Override
protected void onPostExecute(final Boolean success) {
if (success) {
publishProgress();
         
        //realizar a sincronizacao
        SincronizacaoTask sincronizacaoTask = new                SincronizacaoTask(uuidlconta);
sincronizacaoTask.execute((Void)null);
}
}
protected void onProgressUpdate() {
//Atualizar a UI no entanto eh uma nota activity
Intent intent = new Intent(getApplicationContext(), LancamentosActivity.class);
          intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
         
          startActivity(intent);
   }
}        


2013/10/6 Douglas Drumond <drumond.douglas@gmail.com>
Naquele código que enviei, o download é feito em background e não tem nada na tela. Somente após o download algo é exibido. A sequência é:

download em background – nada na tela, mas a thread de UI não fica bloqueada, se tiver algo, dá p interagir
fim do download – atualiza a UI
salva no banco em background – o que está na tela é interativo.

Provavelmente seu fluxo é outro e não ficou claro no e-mail resumido.


2013/10/5 Paulo Henrique Peres <paulohenriquepo@gmail.com>
Nao deu certo nao.

O que eu preciso na verdade eh buscar uns dados do webservice e salvar no banco de dados do device apos a pessoa fazer login.
Esses dados serao usados para usar uma parte da aplicacao qdo estiver off-line.
No entanto quero que seja possivel o usuario utilizar a aplicacao enquanto eh realizada a sincronizacao.
Eu dei uma olhada na classe AbstractThreadedSyncAdapter, mas pelo que entendi ela eh pra ser utilizada como um servico se nao me engano. 
Acho que nao serve no meu caso.



2013/10/4 Douglas Drumond <drumond.douglas@gmail.com>
Você baixa na mesma AsyncTask que salva no banco? Até pode ser, mas precisa fazer um publishUpdate no meio.

Vai ficar mais ou menos assim na sua Async:

class SincronizacaoTask extends AsyncTask <Void, String[], String[]> {

   protected String[] doInBackground(Void… params) {
       download das coisas

       String[] retornoParaUsuario = new String[]{status, mensagem.toString()};
       publishProgress(retornoParaUsuario);

       salva no banco

       return retornoParaUsuario;
   }

   protected void onProgressUpdate(String[]… progressArray) {
        atualiza a tela com status e mensagem do progressArray[0][0] (status) e progressArray[0][1] (mensagem.toString())
   }
}


Desse jeito você exibe algo na tela depois do download, mas antes de salvar no banco.



2013/10/4 Paulo Henrique Peres <paulohenriquepo@gmail.com>
To fazendo uma app que faz uma requisicao em um webservice,
com a resposta do web service parte dos dados serao exibidos ao usuario
e outra parte sera inserida no banco local do device.

Esses dados que serao inseridos no banco local eu coloquei dentro de uma AsyncTask na esperanca de que a aplicacao mostraria a resposta ao usuario 
e ficaria no fundo salvando esses dados.

No entanto nao foi esse o comportamento, a resposta so chega ao usuario (atualiza a tela) depois que termina de rodar a AsyncTask.

Segue parte do codigo


//busca os dados aqui

try{

SincronizacaoTask sincronizacaoTask = new SincronizacaoTask(uuidlconta);

sincronizacaoTask.execute((Void)null);

}catch(Exception e){

Log.e("bbb", "I got an error", e);

}

//Retorno do metodo com a resposta do usuario

return new String[]{status, mensagem.toString()};


Como faco pro comportamento ser da dorma como descrevi acima?





--
Paulo Henrique Peres
Oracle Certified Professional, Java Programmer 
Oracle Certified Professional, Web Component Developer

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

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



--
Paulo Henrique Peres
Oracle Certified Professional, Java Programmer 
Oracle Certified Professional, Web Component Developer

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

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



--
Paulo Henrique Peres
Oracle Certified Professional, Java Programmer 
Oracle Certified Professional, Web Component Developer

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

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



--
Paulo Henrique Peres
Oracle Certified Professional, Java Programmer 
Oracle Certified Professional, Web Component Developer

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