1

AsyncTaskのOnPOstExecuteに問題があり、完全に機能しますが、アプリケーションがなんらかの方法で停止した場合、AsyncTaskを実行するアクティビティを開く通知を生成するメッセージが呼び出されません。

私の疑問は、アプリケーションが閉じている場合に通知からアクティビティを開こうとすると、なぜOnPOstExecuteが機能しないのかということです。

コード:

      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
4

2 に答える 2

0

ドキュメントによると http://developer.android.com/reference/android/os/AsyncTask.html

onPostExecute(Result)、バックグラウンド計算が終了した後にUIスレッドで呼び出されます。>バックグラウンド計算の結果は、パラメーターとしてこのステップに渡されます。

アプリケーションを閉じると、UIスレッドはなくなります。そのため、ログには「デッドスレッドに関する」ステートメントが表示されます。

于 2013-02-25T21:47:40.403 に答える