Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] AsyncTask - onPostExecute não é chamado

Fiquei interessado em como atualizar a UI por Receiver. 


Agradeceria também se divulgasse Pedro!

Em 28 de fevereiro de 2013 11:21, Guilherme Gregores <gui.gregores@gmail.com> escreveu:
Então Pedro, se não for muito problema pra você eu ia gostar muito ^^.

Em 28 de fevereiro de 2013 10:42, Pedro Subutzki <Pepeu> <falecompepeu@gmail.com> escreveu:
é tranquilo atualizar a UI através de um broadcast receiver.

Se quiser posso passar o esquema.


Em 27 de fevereiro de 2013 18:05, Leonardo S <leonardo.s.comm@gmail.com> escreveu:

Guilherme,

Por que vc não tenta atualizar a UI por broadcast receiver, que é a maneira mais recomendada ?
Dessa forma, evita problema de sincronismo entre a thread de AsyncTask e da UI.
E pode conseguir isolar o problema. 


Em 27 de fevereiro de 2013 16:40, Bruno Albuquerque <bruno.albuquerque@gmail.com> escreveu:

Se você conseguir isolar o problema e criar um código de teste simples que reproduz o mesmo, eu dou uma olhada pra você.



Em 27 de fevereiro de 2013 16:03, Guilherme Gregores <gui.gregores@gmail.com> escreveu:

Obrigado pela força Bruno, mas o problema continua. 
Coloquei Class.forName("android.os.AsyncTask"); no onCreate() da minha Activity, ele não da nem 1 problema, mas o erro ainda continua depois dele chamar o doInBackground  Handler{40530e28} sending message to a Handler on a dead thread. 
Vi algo parecido com oque voce disse no stackoverflow mas o resultado foi o mesmo. Se voce tiver mas alguma ideia do motivo ou souber de um jeito + facil de rodar minha loadlistview estou aberto a sugestões .

Em 26 de fevereiro de 2013 19:50, Bruno Albuquerque <bruno.albuquerque@gmail.com> escreveu:

Você está batendo de frente com uma particularidade do AsyncTask. O seu código espera que ele seja inicializado na main thread mas isso não é garantido ocorrer. Como você está iniciando a sua app através de uma notificação, esse é exatamente seu problema.

Existe um workaround bem simples. No seu onCreate(), adicione isso:

Class.forName("android.os.AsyncTask");

Isso vai forçar a inicialização dos inicializadores estáticos da sua AsyncTask na main thread e deve fazer tudo funcionar.

Se quiser mais detalhes, é só dizer.

-Bruno


Em 26 de fevereiro de 2013 15:31, Guilherme Gregores <gui.gregores@gmail.com> escreveu:

Mudei aqui leonardo mas o problema continua =z, se souber de algum outro motivo para não estar funcionando me deixe informado valeu ^^.  

Em 26 de fevereiro de 2013 14:54, Leonardo S <leonardo.s.comm@gmail.com> escreveu:

Cara ... não vi nada de errado em seu código então. Nunca tive esse problema.
Costumo a usar no início super.onPostExecute(result);. Não sei se faz diferença.

  
   @Override          protected void onPostExecute(String result) {              super.onPostExecute(result);              // resto              


Em 26 de fevereiro de 2013 14:25, Guilherme Gregores <gui.gregores@gmail.com> escreveu:

Entao leonardo, quando o usuario recebe uma notificação de mensagem, se ela for clicada abre minha activity, onde tem uma lista que seria carregada pelo onPostExecute da AsyncTask, que é chamada no onCreate da activity.

Em 26 de fevereiro de 2013 12:11, Leonardo S <leonardo.s.comm@gmail.com> escreveu:

Se a aplicação está fechada, não faz sentido esperar o onPostExecute, já que ele roda na UIThread.
Use BroadcastReceiver e separa o download da atualização da UI.


Em 25 de fevereiro de 2013 15:42, Guilherme Gregores <gui.gregores@gmail.com> escreveu:

Então Lucio acho que acabei me expressando mal, a aplicação está fechada(o usuario acaba de ligar o celular ou o próprio android finaliza ele..etc), e quando uma mensagem é enviada para esse usuario, gera um notificação que abre a conversa só que não carrega a conversa salva no banco interno pois o  OnPostExecute não é chamado. 
O estranho é que se a aplicação esta aberta a notificação funciona normalmente abrindo a conversa e carregando a conversa no banco.


2013/2/25 luciofm <luciofm@gmail.com>
Isso acontece pois quando acontece um Force Close, seu aplicativo é encerrado, todo o processo é morto e nenhum código mais é executado.

Lúcio Maciel
luciofm@gmail.com


On Mon, Feb 25, 2013 at 2:20 PM, Guilherme Gregores <gui.gregores@gmail.com> wrote:
Ola,

Tenho um app que funciona como um especie de Chat onde eu uso uma AsyncTask para carregar a lista da conversa, que funciona normalmente.

O meu problema na verdade é quando o aplicativo para por algum motivo (Force close, por exemplo). 

Caso uma mensagem seja recebida via GCM(onde é gerada uma notificação com um Intent para a Conversa, como qualquer Chat) após o Force close, o método OnPostExecute da AsyncTask  não é chamado. Faço a chamada da Asynctask no onCreate, segue o código:

  protected void onCreate(Bundle savedInstanceState) {                  super.onCreate(savedInstanceState);          ...          ...                 try{                      loadListTask = new LoadListTask();                      loadListTask.execute();                  }catch(Exception e){                      Log.d(TAG,"ERRO: "+e.getMessage());                   }        }
  public void loadListView() {          messagesDb = useful.buscarMessagesDb(this);          ArrayList<Message> messageListViews = new ArrayList<Message>();          int messagesDbSize = messagesDb.size();          for (int i = 0; i < messagesDbSize; i++) {              if (((messagesDb.get(i).idFrom == myId) && (messagesDb.get(i).idTo == idContact)) ||                       ((messagesDb.get(i).idFrom == idContact) && (messagesDb.get(i).idTo == myId))) {                  Message message = new Message(messagesDb.get(i).idFrom, messagesDb.get(i).idTo,                           messagesDb.get(i).dt, messagesDb.get(i).mensagem, messagesDb.get(i).confirm,                          messagesDb.get(i).idWeb);                             messageListViews.add(message);              } else {                  //Log.d(TAG, "Essa mensagem não é pra esse contato!!!");              }          }              listChat.setAdapter(null);              pref.edit().putBoolean("isUpdate", false).commit();              AdapterMessageListView adapterMessageListView = new AdapterMessageListView(myId, idContact,                       getApplicationContext(), messageListViews);               listChat.setAdapter(adapterMessageListView);              listChat.setCacheColorHint(Color.TRANSPARENT);              listChat.setSelection(listChat.getCount());      }
  private class LoadListTask extends AsyncTask<Void, Void, String> {        @Override      protected String doInBackground(Void... params) {          try {              Log.d(TAG,"doInBackground");              Thread.sleep(100);          } catch (InterruptedException e) {            }          return "list";      }            @Override          public void onPreExecute() {              Log.d(TAG,"PREEXECUTE");            }            @Override          protected void onPostExecute(String result) {                Log.d(TAG,"PostExecute");              loadListView();              loadListTask = new LoadListTask();              loadListTask.execute();              super.onPostExecute(result);          }      }
  Log:
  02-25 14:05:42.396: D/Chat(20663): Do in Background  02-25 14:05:42.396: W/MessageQueue(20663): Handler{40532ad8} sending message to a Handler on a dead thread  02-25 14:05:42.396: W/MessageQueue(20663): java.lang.RuntimeException: Handler{40532ad8} sending message to a Handler on a dead thread  

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

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

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

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

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

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



--
Abraços,
Pedro Subutzki
__________________________________________
HADI - Makes SQLite in Android easy and simple
https://github.com/PepeuCps/Hadi

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



--
Att,
Gabriel Augusto
013 97940055

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