1

У меня возникла проблема с OnPOstExecute из AsyncTask, она отлично работает, но если приложение каким-то образом останавливается, то msg, который генерирует уведомление, которое открывает Activity, которое запускает AsyncTask, но OnPOstExecute никогда не вызывается.Проблема с AsyncTask, когда вызывается onPostExecute?

Я сомневаюсь, почему OnPOstExecute не работает, когда я пытаюсь открыть Activity из Notification, если приложение закрыто.

Код:

 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); 
      } 
     } 

Сообщение:

02-25 14:05:42.396: D/Chat(20663): doInBackground 
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 
+1

показать код. –

+0

можете ли вы разместить свой код? – itsrajesh4uguys

+0

показать свой код ... – KDeogharkar

ответ

0

Согласно документации http://developer.android.com/reference/android/os/AsyncTask.html

onPostExecute (Результат), вызывается в потоке пользовательского интерфейса после фона вычислений заканчивается. > Результат вычисления фона передается на этот шаг в качестве параметра.

Как только ваше приложение будет закрыто, больше нет нити пользовательского интерфейса. Вот почему журнал показывает заявление «на мертвой нити».

+0

Вообразите эту ситуацию, пользователь просто включил сотовый телефон, и я отправил ему сообщение, сообщение генерирует уведомление на сотовом телефоне, когда пользователь нажимает это уведомление, он открывает Activity и onCreate этого инициатива активности AsyncTask. –

+0

Это действительный прецедент и один я использую себя в одном из моих приложений. С помощью GCM (Google Cloud Message) вы отправляете сообщение в приложение. В onMessage() я проверяю, активна ли активность. Если это так, я запускаю AsyncTask, и если я не создаю уведомление и устанавливаю флаг. В следующий раз, когда приложение активировано, я проверяю флаги и при необходимости запускает AsyncTask. –

Смежные вопросы