안드로이드 AsyncTask, onPreExecute(), doInBackground() 모두 실행되지 않습니다.

조회수 3152회

안녕하세요. 처음으로 질문남깁니다.

Main 쓰레드에서 다음과 같이 AsyncTask를 실행시킵니다.

        FetchPlacesListTask placesListTask = new FetchPlacesListTask(this);
        placesListTask.execute(category);

다음과 같이 DB에서 받아온 Place 리스트를 adapter로 연결하려고 합니다.

   public class FetchPlacesListTask extends AsyncTask<String, Void, List<Place>> {

        private final Context mContext;
        private List<Place> listPlaces;

        public FetchPlacesListTask(Context context) {
            mContext = context;
        }

        @Override
        protected List<Place> doInBackground(String... params) {
            Log.v("AsyncTask", "doInBackground");

            placeDAO = new PlaceDAO(mContext);
            listPlaces = placeDAO.getPlacesByType(params[0]);

            return listPlaces;
        }

        @Override
        protected void onPostExecute(List<Place> places) {
            if (places != null) {
                adapter = new ListPlacesAdapter(mContext, places);
                listViewPlaces.setAdapter(adapter);
            }
            placeDAO.close();
        }
    }

그런데 FetchPlacesListTask가 생성되는 것 까지는 확인했는데 doInBackground()나 onPostExecute()가 실행되지 않습니다. 무슨 문제가 있는 걸까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 자답입니다. doInBackground()와 onPostExecute()는 정상적으로 실행되는데 제가 이해가 덜 된 부분이 있어 오류가 발생했었습니다. 알 수 없는 사용자 2016.7.19 08:29

1 답변

  • 이미 답을 구하셔서 질문에 대한 해결책은 아닙니다만 AsyncTask를 사용할 때 확인해 볼 만한 내용 추가했습니다.

    AsyncTask는 허니콤 이상부터 스레드 관리를 SerialExecutor를 사용합니다. 따라서 여러개의 AsyncTask가 실행될 때, 이전의 AsyncTask가 종료되지 않으면 다음 AsyncTask가 실행되지 않습니다. 스레드가 실행되지 않는다면 이부분에 대한 가능성도 확인해보는게 좋습니다. (설정을 통해서 병렬 실행 가능)

    그리고 아래 링크에서 Threading rules이라는 부분을 읽어보면 코드를 작성할 때 도움이 됩니다.

    AsyncTask의 히스토리와 문제와 해결이 정리된 글

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)