물에 살고싶은 개발자

Asynctask 간과하지 말아야 할것 본문

Android

Asynctask 간과하지 말아야 할것

돼지사랑 2017. 4. 21. 15:02

Cannot execute task: the task has already been executed


라는 오류메시지를 내놓을 때가 있다


이거슨 Asynctask는 단 한번만 execute 할수 있기때문에 생기는 익셉션이다.


해결책은 내가아는선에선 매번 execute할때마다 새롭게 인스턴스화할수밖에 없다


execute하기전에 항상 새로 인스턴스화해주자




그리고 종료를 시켜줄때는 cancel()를 쓰면 된다.


하.지.만 중요한건 cancel()만 한다그래서 스레드가 자동으로 종료되진 않더라..


그래서 doInBackground() 내부에서 캔슬됏는지 여부를 확인한 후에 수동으로 종료시켜줘야한다


if(this.isCancelled()){
return null;
}


이런식으로 종료시켜주면 된다.


(물론 그 이전에 아래처럼 post에서 cancel()해줘야 제대로 종료되겠지?)


protected void onPostExecute(Integer integer) {
cancel(
true); }



Comments