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


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

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()가 실행되지 않습니다. 무슨 문제가 있는 걸까요?

  • 2016년 07월 19일에 작성됨

  • 자답입니다. doInBackground()와 onPostExecute()는 정상적으로 실행되는데 제가 이해가 덜 된 부분이 있어 오류가 발생했었습니다.    신재훈   2016.7.19 08:29     
조회수 286


1 답변


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

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

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

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


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close