마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

선배님들의 조언 부탁드립니다.AsyncTask

0 추천
안녕하세요.

해결하려고 노력하다 노력하다 도저히 안되 선배님들께 조언을 구하고자

이렇게 글을 쓰게 되었습니다..

현재 웹상의 이미지를 HTTP통신을 하여 스트림으로 BIT형태로 얻어오는

작업을 하는 AsyncTask를 통해 구현하였습니다.

이미지를 5개정도 연달아 얻어오는 경우가 작업중에 생겨

만들어 두었던 AsyncTask를 5번 new AsyncTaskDownloadManager(파라미터...).excute() 이런식으로

다섯개정도 날렸는데...

디버깅모드에서 보니 이미지 다 뿌리고 나서도 계속 쓰레드가 살아 있습니다;;

도대체 어케 죽이는지 아무리 고민하고 서핑하고 해서 했는데도 도저히 안되

퇴근하자마자 이렇게 글을 씁니다.ㅠㅠ

Cancle(true)하면 된다고 서핑에 있어서..

백그라운드 작업이 끝나고 UI쓰레드로 넘어가는 onPreExcute() 메서드쪽에서 this.Cancle(true); 를 해도

AsyncTask가 죽지를않습니다.

제발 조언 부탁드립니다.ㅠㅠ

잠도 안올거같아요.ㅠㅠ
갸아악 (21,260 포인트) 님이 2013년 2월 26일 질문

1개의 답변

0 추천
class MyTask extends AsyncTask<Void, Void, Void> {
 
  private volatile boolean running = true;
 
  private final ProgressDialog progressDialog = null;
 



  public MyTask(Context ctx) {
 
   // progressDialog = gimmeOne(ctx);
 



   progressDialog.setCancelable(true);
 
   progressDialog.setOnCancelListener(new OnCancelListener() {
 
    @Override
 
    public void onCancel(DialogInterface dialog) {
 
     // actually could set running = false; right here, but I'll
 
     // stick to contract.
 
     cancel(true);
 
    }
 
   });
 
  }
 



  @Override
 
  protected void onPreExecute() {
 
   progressDialog.show();
 
  }
 



  @Override
 
  protected void onCancelled() {
 
   running = false;
 
  }
 



  @Override
 
  protected Void doInBackground(Void... params) {
 
   while (running) {
 
    // does the hard work
 
   }
 
   return null;
 
  }
 
  // ...
 
 }
 

 

참조하세요...

 

근데 걍 로드후에 onPostExecute에서 null해주셔도 됩니다(미리 변수로 만드시면 됨 ㅋ)

수상한i (8,050 포인트) 님이 2013년 2월 26일 답변
무엇을 null 하라는 말씀이신지 이해가 안됩니다..ㅠ
ASYNCTASK를 new Asynctask로 생성하실때 클래스 변수 만드셧다가
그걸 null만드시면 되요
...